2017-01-29 4 views
0

ich eine Auswahl treffen möchten, die Werte von ID aufblicken Name aus zwei Spalten in derselben Tabelle:Inner Join mit zwei Spalten

Tabelle: Gift

FromID ToID 
1  2 
2  6 
3  2 
5  3 

tablel Users

UserID Username 
1  A 
2  B 
3  C 
4  D 
5  E 
6  F 

Erwartete Ausgabe:

FromUser ToUser 
A   B 
B   F 
C   B 
E   C 
Hier

Antwort

0

ist ein Trick JOIN mit IN Zustand mit

SELECT Max(CASE WHEN FromID = u.UserID THEN Username END), 
     Max(CASE WHEN ToID = u.UserID THEN Username END) 
FROM users u 
     JOIN gift g 
     ON u.UserID IN (g.FromID, g.ToID) 
GROUP BY FromID, 
      ToID 

Oder benötigen Sie den users Tisch setzen zweimal

SELECT f.Username, 
     t.Username 
FROM gift g 
     LEFT JOIN users f 
       ON f.UserID = g.FromID 
     LEFT JOIN users t 
       ON t.UserID = g.ToID 
0

Sieht aus wie Sie einen Rückblick auf benötigen, wie mit mehreren Beziehungen zwischen der Arbeit dieselben zwei Tabellen.

Ihr Geschenk Tisch hat eine Beziehung, die beschreibt, die das Geschenk gab - ich nenne es hier Geber; und eine Beziehung, die beschrieb, wer das Geschenk erhielt - ich nenne es hier Empfänger. Beide Beziehungen von Geschenk sind viele-zu-eins gegenüber dem Benutzertisch.

Sie einfach den gleichen Tisch zweimal teilnehmen und aus dieser Tabelle eine gute Korrelation Namen geben - Geber und Empfänger in meinem Beispiel - im Code zu zeigen, was du für sie verwenden.

Wie so:

WITH 
gift(fromid,toid) AS (
      SELECT 1,2 
UNION ALL SELECT 2,6 
UNION ALL SELECT 3,2 
UNION ALL SELECT 5,3 
) 
, 
users(userid,username) AS (
      SELECT 1,'A' 
UNION ALL SELECT 2,'B' 
UNION ALL SELECT 3,'C' 
UNION ALL SELECT 4,'D' 
UNION ALL SELECT 5,'E' 
UNION ALL SELECT 6,'F' 
) 
SELECT 
    giver.username as fromUser 
, receiver.username as toUser 
FROM gift 
JOIN users AS giver 
    ON gift.fromid=giver.userid 
JOIN users AS receiver 
    ON gift.toid =receiver.userid 
ORDER BY 1,2 
; 

fromUser|toUser 
A  |B 
B  |F 
C  |B 
E  |C