2010-03-12 44 views
1

我正在做一對WHERE子句中帶有變量的連接。我不確定我是否盡我所能儘可能高效地完成任何事情,甚至是使用最佳做法,但是我的問題是我的一半表格有數據,當時我的表格數據類型爲tableC.type = 500,另一半數據不會導致在整個查詢失敗。當在WHERE子句中缺少一個字段時,阻止整個JOINed MYSQL查詢失敗

SELECT tableA.value1 , tableB.value2, tableC.value3 FROM tableA 
JOIN tableB ON tableB.id=tableA.id 
JOIN tableC ON tableC.id=tableB.id 
WHERE tableA.category=$var && tableC.type=500; 

我想發生這樣的是仍然得到tableA.value1tableB.value2即使沒有現場在表C與類型= 500
有什麼想法?我完全難倒如何處理這個...

回答

4
SELECT tableA.value1 , tableB.value2, tableC.value3 FROM tableA 
JOIN tableB ON tableB.id=tableA.id 
LEFT JOIN tableC ON tableC.id=tableB.id AND tableC.type=500 
WHERE tableA.category=$var; 

[INNER] JOIN(你有)連接只值存在;

如果tableC中找不到匹配的行,LEFT JOIN將爲tableC列返回NULL。

我認爲有必要在使用LEFT JOIN時將tableC條件移入ON子句,因爲WHERE會過濾掉NULL值(因爲tableC.type IS NULL!= 500)。

+0

哦,太棒了,是的,我試過左連接,但我不知道我可以把條件後的ON條款 – filip 2010-03-12 07:06:00