MySQL左外连接

10
我有两个表格:
  1. employee,包含 employee_id、firstname、middlename 和 lastname 字段。
  2. timecard,包含 employee_id、time-in、time-out 和 tc_date_transaction 字段。
我想选择所有与 timecard 表格中的 employee_id 相同且日期等于当前日期的 employee 记录。如果没有记录与当前日期相等,则返回即使没有 time-in、timeout 和 tc_date_transaction 也要返回 employee 记录。
我的查询语句如下:
SELECT * 
  FROM employee LEFT OUTER JOIN timecard 
       ON employee.employee_id = timecard.employee_id
 WHERE tc_date_transaction = "17/06/2010";

结果应该像这样:

员工编号 | 名字 | 中间名 | 姓氏 | 上班时间 | 下班时间 | 日期
------------------------------------------------------------------------------------------
     1   | 约翰 | T       | 克鲁兹 | 08:00  | 05:00   | 17/06/2010     
     2   | 玛丽 | J       | 冯      | null   | null    | null
1个回答

20

你正在过滤 tc_date_transaction 字段,它会过滤掉该字段中的所有空值,甚至包括外连接生成的空值,这将导致过滤无效。把过滤条件“tc_date_transaction =“17/06/2010””移到连接子句中即可解决问题。

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);

你好,Loxley,我尝试了你的代码,但出现了一个错误:“不支持连接表达式”。谢谢。 - tirso

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接