2012-11-15 70 views
1

我一直在研究一個項目,我需要兩個表中的數據。我在MySQL查詢方面的專家,但我得到了這一步:MySQL查詢WHERE x,如果設置y

SELECT * 
FROM `p_list` AS pl 
JOIN `employee` AS em 
WHERE em.id =10 
AND pl.employee_id =10 

它正常工作時,有一個pl.employee_id,但返回Ø結果那裏沒有。這是有道理的,但我不知道如何讓它返回em.id = 10,如果pl.employee_id設置。

我即將放棄,只是運行兩個查詢,讓PHP做骯髒的工作。

+0

必須有一個錯字在你的第二個段落,因爲它是矛盾的......? –

+0

我相信這兩個答案都是不正確的......通過使用LEFT JOIN,但在EM.ID上放置絕對的WHERE子句,基本上會創建一個正常的INNER JOIN。所以,真正的問題是......你是否想要所有的「P_LIST」記錄,而不管員工匹配?或者你真的只想要特定員工的數據......他們不能兼而有之。 – DRapp

回答

1

試試這個,使用LEFT JOIN

SELECT * 
FROM `p_list` AS pl 
     LEFT JOIN `employee` AS em 
      ON em.id = pl.employee_ID 
WHERE em.id = 10 

基本上,你現在正在做的是一個INNER JOININNER JOIN不同於LEFT JOIN這是你需要的)。如果在連接條件中指定的記錄在另一個表上至少有一個匹配,則返回結果INNER JOINLEFT JOIN,另一方面爲,返回在表中指定的所有行,而不管它在另一個表上是否匹配。

+0

這是一個厚顏無恥的編輯:) – Fenton

+0

通過添加WHERE子句,您基本上通過確認WHERE EM.ID = 10來取消您的LEFT JOIN。我在他的問題中評論以澄清他實際想要的內容。 – DRapp

+0

@DRapp我不確定你的意思。因爲就我的理解而言,他只想選擇'em.id = 10',而不是'employee'表上是否匹配。 –

0

您可以使用左連接要做到這一點:

SELECT * 
FROM `p_list` AS pl 
LEFT JOIN `employee` AS em ON em.id = pl.employee_id 
WHERE em.id =10