2014-07-23 55 views
0

我有下面的查詢,但是如果我搜索table_b或table_c或table_d中包含的數據,我不會得到結果。解釋我爲什麼並糾正問題?從查詢的兩側獲取數據

SELECT c.contratto,nominativo, email_pers,dt_ch_conto 
FROM clienti AS c 
LEFT JOIN table_b AS s ON (c.contratto=s.contratto) 
LEFT JOIN table_c AS r ON (c.contratto=r.contratto) 
LEFT JOIN table_d AS n ON (c.contratto=n.contratto) 
WHERE (nominativo LIKE '%$stringa%' OR c.contratto LIKE '%$stringa%' OR c.email_pers LIKE '%$stringa%') 
OR ((s.login LIKE '%$stringa%' AND s.attivo='SI') 
OR (r.login LIKE '%$stringa%' AND r.attivo='SI') 
OR (n.login LIKE '%$stringa%' AND n.attivo='SI')) 
AND ((dt_ch_conto is null) AND (dt_ch_conto=0) AND (dt_ch_conto='')) GROUP BY c.contratto LIMIT 15 
+0

Ÿ不'c.nominativo,c.email_pers,c.dt_ch_conto' –

回答

1

你的WHERE子句由

(or-expression) AND (and-expression) 

與和表達

((dt_ch_conto is null) AND (dt_ch_conto=0) AND (dt_ch_conto='')) 

這個表達式不可能是真實的,因爲dt_ch_conto不能在同一時間有值

NULL, 
0, 
'' 

所以你有

(expression) AND False 

什麼結果爲

WHERE false 

的每一行。我不能肯定,但可能要在第二個表達式

((dt_ch_conto is null) OR (dt_ch_conto=0) OR (dt_ch_conto='')) 
+0

感謝您的答案,但如果我搜索數據上clienti我所含得到結果,如果我在table_b上搜索,我什麼也得不到 – haltman