2016-07-12 4 views
0

Ich habe folgendes Datenbankschema in einer Mysql DatenbankLEFT OUTER JOIN in SQL mit Daten in der rechten Tabelle fehlen

Benutzer

  • id
  • Name

Anwesenheits

  • id
  • User_id
  • checked_on (Datum)

nun für einen bestimmten Zeitraum ich einen Bericht erstellen möchten, die einen Benutzer und eine andere Spalte aufgelistet, die sagt, ob sie an diesem Tag anwesend waren oder nicht.

Ich habe versucht, es zu tun bekommen mit Left Outer Join die folgende Abfrage

select * from users left outer join attendance on users.id = attendance.user_id where users.id in (11, 12); 

Wie unter Verwendung der obigen Abfrage zu ändern, so dass ich den Bericht zu bekommen?

+0

einige Beispieldaten und erwartete Ergebnis hinzufügen. – Blank

Antwort

2

Sie können eine Abfrage wie die folgende verwenden:

select u.*, 
     IF(a.id IS NOT NULL, 'Present', 'Not Present') AS IsPresent 
from users u 
left outer join attendance a 
    on u.id = a.user_id and a.checked_on = ? 
where u.id in (11, 12); 
+0

Dies funktioniert, wenn ich ein einzelnes Datum in der Bedingung gebe. Aber wenn ich eine Reihe von Daten in die Bedingung wie 'a.checked_on> =' 2016-07-01 'und a.checked_on <=' 2016-07-15 '' einfüge, werden nur Zeilen gedruckt, in denen der Benutzer eingecheckt hat. Gibt es einen Weg, um es für eine Reihe von Daten auch funktionieren zu lassen? – Sudar

+0

@Sudar Ja, nehmen Sie einfach die Prädikate 'a.checked_on> = '2016-07-01' und a.checked_on <= '2016-07-15'' in die' ON'-Klausel, ** nicht ** in' WO ". –

Verwandte Themen