2010-06-17 19 views
9

Ich habe zwei Tabellen:mysql Außen LEFT JOIN

  1. employee mit Feldern employee_id, Vorname, Zweiter Vorname, Nachname
  2. timecard mit Feldern employee_id, zeit in, Time-out, tc_date_transaction

Ich möchte alle Angestellten Datensätze auswählen, die die selbe employee_id mit Zeitkarte haben und das Datum mit dem aktuellen Datum übereinstimmt. Wenn keine Datensätze mit dem aktuellen Datum übereinstimmen, geben Sie auch die Datensätze des Mitarbeiters zurück, auch ohne time-in, timeout und tc_date_transaction.

Ich habe eine Abfrage wie diese

SELECT * 
    FROM employee LEFT OUTER JOIN timecard 
     ON employee.employee_id = timecard.employee_id 
WHERE tc_date_transaction = "17/06/2010"; 

Ergebnis dieses mögen sollte:

 
employee_id | firstname | middlename | lastname | time-in | time-out | tc_date_transaction 
------------------------------------------------------------------------------------------ 
    1  | john  | t   | cruz  | 08:00 | 05:00 | 17/06/2010  
    2  | mary  | j   | von  | null | null  | null 

Antwort

18

Sie sind Filterung tc_date_transaction, die alle Null-Werte in diesem Bereich filtert, auch die durch die erzeugte Außen-join und vereitelt daher seinen Zweck. Verschiebe den Filter "tc_date_transaction =" 17/06/2010 "" in die Join-Klausel und es wird funktionieren.

SELECT * 
    FROM employee LEFT OUTER JOIN timecard 
     ON employee.employee_id = timecard.employee_id and tc_date_transaction = "17/06/2010"; 

oder schreiben

SELECT * 
    FROM employee LEFT OUTER JOIN timecard 
     ON employee.employee_id = timecard.employee_id 
    where (tc_date_transaction = "17/06/2010" or tc_date_transaction is null); 
+0

hallo Loxley, habe ich versucht, den Code, aber es war ein Fehler, "Join-Ausdruck wird nicht unterstützt" tnx – tirso

+0

ich meine Antwort aktualisiert, um dieses MY- widerzuspiegeln SQL-Problem – Loxley

+0

hi loxley, Ihr Code funktioniert. tnx – tirso