2010-06-17 104 views
9

我有兩個表:MySQL的左外連接

  1. employee與領域EMPLOYEE_ID,名字,中間名,姓氏
  2. timecard與領域EMPLOYEE_ID,有時間的,超時,tc_date_transaction

我想選擇與timecard具有相同employee_id的所有員工記錄,並且日期與當前日期相同。如果沒有與當前日期相同的記錄,則還要返回員工的記錄,即使沒有進入,超時和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「」移入連接子句中,它將起作用。

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

喜洛克斯利, 我想你的代碼,但有一個錯誤,「加入表達不支持」 TNX – tirso 2010-06-17 06:08:58

+0

我更新了我的答案,以反映這一MY- SQL問題。 – Loxley 2010-06-17 08:28:56

+0

hi loxley, 您的代碼正在工作。 tnx – tirso 2010-06-17 09:38:00