2012-06-01 88 views
1

其中一個令人討厭的問題偶爾會出現,當你一個人工作,你迷失在自己的頭上!我滿以爲,答案是簡單的:MySQL加入查詢 - 或被忽略

我有像這樣的查詢:

SELECT * FROM table_a 
LEFT JOIN table_b ON table_a.order_id = table_b.order_id 
WHERE (table_a.column_a='string' OR table_b.column_b='string' OR table_b.column_c='string') 
group by column_d 

該查詢返回的所有行,似乎是不顧查詢的WHERE部分...除非不是。如果我刪除OR部件,它按預期工作:

SELECT * FROM table_a 
LEFT JOIN table_b ON table_a.order_id = table_b.order_id 
WHERE (table_a.column_a='string') 
group by column_d 

想法/明顯的問題?

更新

我的具體問題是,我正在評估對一個整數列字符串,這意味着評估,以未知的聲明。代碼現在如上所述,但我只是添加特定的或如果字符串是數字

+0

郵政例如數據的條件解決這個,預期的結果和實際結果。您的查詢沒有明顯的問題,問題在於您的數據。 – lanzz

+0

乾杯蘭斯,查看接受的答案 –

回答

2

通過觀察你的加入我猜測你正在比較的一些列是可以爲空並且在哪裏返回結果爲真的行(請注意,這是在階段空值造成對未知相比欄呢,不被退還。您可以通過添加,將檢查是否值不空

SELECT * FROM table_a 
LEFT JOIN table_b ON table_a.order_id = table_b.order_id 
WHERE ((table_a.column_a IS NOT NULL AND table_a.column_a='string') OR (table_b.column_b IS NOT NULL AND table_b.column_b='string') OR (table_b.column_c IS NOT NULL AND table_b.column_c='string')) 
GROUP BY column_d 
+1

乾杯!點點頭,救了我四個小時,把我的頭撞在一堵磚牆上 –