2010-06-17 5 views
9

У меня есть две таблицы:MySQL левое внешнее соединение

  1. employee с полями EMPLOYEE_ID, Firstname, ОТЧЕСТВО, ФАМИЛИЯ
  2. timecard с полями EMPLOYEE_ID, время в, тайм-аут, tc_date_transaction

Я хочу выбрать все записи сотрудников, которые имеют одинаковый employee_id с timecard, а дата равна текущей дате. Если нет записей, совпадающих с текущей датой, тогда возвращайте также записи сотрудника даже без времени, таймаута и tc_date_transaction.

У меня есть запрос, как этот

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

результат должен нравится:

 
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 

ответ

18

Вы фильтрация tc_date_transaction, который фильтрует все нулевые значения в этой области, даже те, порожденные внешнее_соединением и поэтому побеждает его цель. Передвиньте фильтр «tc_date_transaction =» 17/06/2010 «» в предложение join, и он будет работать.

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

или написать

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

привет Локсли, Я попробовал ваш код, но там была ошибка, «присоединиться выражение не поддерживается» Тпх – tirso

+0

Я обновил свой ответ, чтобы отразить это my- SQL проблема. – Loxley

+0

hi loxley, Ваш код работает. tnx – tirso

Смежные вопросы