mysql оставил внешнее объединение

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

  1. employee с полями employee_id, firstname, middlename, lastname
  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
10
задан Mark Elliot 17 June 2010 в 04:20
поделиться

1 ответ

Вы фильтруете 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);
20
ответ дан 3 December 2019 в 19:31
поделиться
Другие вопросы по тегам:

Похожие вопросы: