2016-10-29 4 views
0

Ich habe die folgenden drei Tabellen:Abfrage beitreten Tabellen

Medaltypes

id   name   description 
6   Medalname  Right on! 
7   Medalname2  Aswsome 
8   Medalname3  Allright 

Medaillen

id   medaltype  userref 
1   6    MYUSERNAME 
2   7    MYUSERNAME 
3   6    OTHERUSER 
4   6    OTHERUSERALSO 

Userprofiles

userid  userref 
1   MYUSERNAME 
2   OTHERUSER 
3   OTHERUSERALSO 

Was ich will ist ein Ergebnis aller Medaillen für eine bestimmte Benutzer-ID einschließlich der Onces verdient und die Onces noch verdient werden. Wie für Benutzer-ID 1 würde dies als Ergebnis sein:

Medalname  - Earned 
Medalname2  - Earned 
Medalname3  - To be earned 

ich eine Liste mit dem Medaltypes und Medaillen mit einem linken bekommen kann beitreten, aber sobald ich mitmachen (allein Abfrage auf bestimmten Benutzer-ID lassen) Userprofiles es das reduziert Liste.

Wie sollte diese Abfrage aussehen?

Antwort

2

Sie mögen ein LEFT JOIN verwenden, aber die Bedingung für den Benutzer muss in der ON Klausel gehen:

select ml.name, 
     (case when m.id is not null then 'EARNED' else 'TO BE EARNED' 
     end) 
from medaltypes ml left join 
    medals m 
    on m.medaltype = ml.id and 
     m.userref = 'MYUSERNAME'; 

Ihre Datenstruktur umständlich ist. Medals sollte nicht userref enthalten; Es sollte die ID des Benutzers enthalten.