2017-06-06 7 views
0

Ich weiß, dass ich das in der Vergangenheit getan habe und ich kann jetzt nicht an die Lösung denken ... Ich weiß, dass es eine Art voll äußerer Verbindung ist.Gibt eindeutige übereinstimmende und nicht übereinstimmende Zeilen zurück (äußere Verbindung?)

Ich habe 3 Tabellen bekommt:

ACTIVITIES  
id name   
---+------------- 
1 | Basketball 
2 | Chess Club 

ENROLLMENT     
id activity_id person_id 
---+-------------+----------- 
1 | 1   | 1   
2 | 1   | 2   
3 | 2   | 1   

ATTENDANCE 
id date   person_id activity_id 
---+-------------+----------+--------------- 
1 | 2017-01-01 | 1  | 1 
2 | 2017-01-01 | 2  | 1 
3 | 2017-01-02 | 1  | 1 

Ich versuche, die Teilnahme von person_id zu bekommen, auch wenn die ID nicht für ein Datum existiert:

date   person_id 
------------+--------------- 
2017-01-01 | 1 
2017-01-02 | null 

Hier ist etwas in der Nähe zu dem, was ich denke, ich werde ... brauchen

select date, attendance.person_id 
from enrollment 
**SOME SORT OF JOIN** attendance on enrollment.person_id = attendance.person_id 
where person_id = 1 

Aber alles, was ich zurück bekommen kann:

date   person_id 
------------+--------------- 
2017-01-01 | 1 
2017-01-01 | 1 

... wo die Anzahl der Zeilen korrekt ist, aber die Werte falsch sind.

+0

@ yılmaz, weil sie mit Einschreibung verbunden sein würde, wo die 'person_id' existiert und von' activity_id' meine psuedo Abfrage nicht ganz begründet es – Grant

Antwort

1

Dies scheint in den Ergebnissen zu führen, die Sie wünschen:

select date, 
     max(case when person_id = 1 then person_id end) as person_id 
from attendance a 
group by date 
order by date; 
+0

Mein Held ... Danke Mann – Grant

Verwandte Themen