У меня есть две таблицы:
employee
с полями employee_id, firstname, middlename, lastnametimecard
с полями 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
Вы фильтруете 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);