2010-06-17 13 views
9

Mam dwie tabele:mysql lewo sprzężenie zewnętrzne

  1. employee z polami employee_id, imię, drugie imię, nazwisko
  2. timecard z polami employee_id, czas-in time-out, tc_date_transaction

Chcę wybrać wszystkie rekordy pracowników, które mają ten sam employee_id z kartą czasową, a data jest równa bieżącej dacie. Jeśli nie ma rekordów równych aktualnej dacie, zwróć także rekordy pracownika nawet bez time-in, timeout i tc_date_transaction.

Mam zapytanie jak to

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

rezultacie powinno się podoba:

 
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 

Odpowiedz

18

Jesteś filtrowanie tc_date_transaction który filtruje wszystkie wartości null w tej dziedzinie, nawet te generowane przez zewnętrzną dołącz i dlatego pokonuje jego cel. Przenieś filtr "tc_date_transaction =" 17/06/2010 "" do klauzuli join i będzie działać.

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

lub napisać

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

hi Loxley, Próbowałem swój kod, ale wystąpił błąd "dołączyć wyrażenie nie jest obsługiwany" tnx – tirso

+0

zaktualizowałem moją odpowiedź, aby odzwierciedlić tę MY- Problem SQL. – Loxley

+0

hi loxley, Twój kod działa. tnx – tirso

Powiązane problemy