2017-12-21 19 views
1

Fiddle hier passend: http://sqlfiddle.com/#!9/53d3c/2/0Join zwei Tabellen mehr IDs zu Namen

Ich habe zwei Tabellen, eine, das Mitglied Namen und ihre ID-Nummer. Lassen Sie sich, dass die Tabelle nennt Namen:

CREATE TABLE Names (
    ID int, 
    Title text 
); 

INSERT INTO Names 
VALUES (11,'Chad'), 
    (10,'Deb'), 
    (34,'Steph'), 
    (13,'Chris'), 
    (98,'Peter'), 
    (33,'Daniel'), 
    (78,'Christine'), 
    (53,'Yolanda') 
; 

Meine zweite Tabelle enthält Informationen zu treffen, wo jemand einen Coach und jemand ist ein Spieler. Jeder Eintrag ist eine separate Zeile (d. H. Meeting_ID 1 hat zwei Einträge, einen für den Coach, einen für den Teilnehmer). Außerdem gibt es eine Spaltenkennung, wenn diese Zeile für einen Trainer oder Spieler bestimmt ist.

CREATE TABLE Meeting_Data (
    Meeting_ID int, 
    Player_ID int, 
    Coach_ID int, 
    field_id int 
); 

INSERT INTO Meeting_Data 
VALUES (1,0,11,2), 
    (1,10,0,1), 
    (2,34,0,1), 
    (2,0,13,2), 
    (3,98,0,1), 
    (3,0,33,2), 
    (4,78,0,1), 
    (4,0,53,2) 
; 

Was ich versuche, eine Tabelle zu tun ist, erstellen, die jede Sitzung auf eine Zeile setzt, und legt dann die ID # s und Namen der Sitzung Menschen. Wenn ich dies versuche, bekomme ich eine Spalte, um erfolgreich zu ziehen und dann eine Spalte von (Null) -Werten.

SELECT Meeting_ID, 
    Max(CASE 
     WHEN field_id = 1 THEN Player_ID 
     END) AS Player_ID, 
    Max(CASE 
     WHEN field_id = 2 THEN Coach_ID 
     END) AS Coach_ID, 
    Player_Names.Title as Player_Names, 
    Coach_Names.Title as Coach_Names 

FROM Meeting_Data 

LEFT JOIN Names Player_Names 
ON Player_ID = Player_Names.ID 

LEFT JOIN Names Coach_Names 
ON Coach_ID = Coach_Names.ID 

GROUP BY Meeting_ID 

was zur Folge hat:

| Meeting_ID | Player_ID | Coach_ID | Player_Names | Coach_Names | 
|------------|-----------|----------|--------------|-------------| 
|   1 |  10 |  11 |   Deb |  (null) | 
|   2 |  34 |  13 |  Steph |  (null) | 
|   3 |  98 |  33 |  Peter |  (null) | 
|   4 |  78 |  53 | Christine |  (null) | 

Antwort

1

Wie wäre es so etwas wie dieses (http://sqlfiddle.com/#!9/53d3c/52/0):

SELECT Meeting_ID, Player_ID, Coach_ID, Players.Title, Coaches.Title 
FROM (
    SELECT Meeting_ID, 
    MAX(Player_ID) as Player_ID, 
    MAX(Coach_ID) as Coach_ID 
    FROM Meeting_Data 
    GROUP BY Meeting_ID 
) meeting 
LEFT JOIN Names Players ON Players.ID = meeting.Player_ID 
LEFT JOIN Names Coaches ON Coaches.ID = meeting.Coach_ID 
+0

Miles Sie ein Lebensretter sind! Vielen Dank! –