mysql條件查詢中AND與OR聯合使用的注意事項!


mysql查詢中經常會用到AND與OR一起使用的情況,可如果寫法不對,往往會起到相反的效果,這不,前幾天就碰到了,最后測試果然提了一堆bug!!!!

 

廢話就不多說了,主要總結一下幾點:

一 當mysql的WHERE語句中出現AND OR時,AND 要么全部放在 OR的前面,放在OR之后的and條件將不會起作用,參考sql:

SELECT
	e.total_amount
FROM
	cmo_expense_account e
WHERE 
	e.project_id='236aec01d88e48cdaaee357a870d18b5'
	AND	e.ea_type =1
	OR (e.project_id  in (select t1.id from pm_project t1 where t1.parent_id='236aec01d88e48cdaaee357a870d18b5'))
	and e.total_amount>300

  當然,結果肯定是200的也會出現,如果你把 AND e.ea_type =1再放到后面,naer_type=2的也就出現了,

二 如果你怕出錯,可以使用union all寫法

將and與or分開,這樣就不會存在問題了,就是比較麻煩,

                select sum(t3.total_amount) from   (
                SELECT
                    e.total_amount
                FROM
                    cmo_expense_account e
                WHERE e.project_id='236aec01d88e48cdaaee357a870d18b5'
                AND    e.ea_type =1

                union ALL
                
                SELECT
                    e.total_amount
                FROM
                    cmo_expense_account e
                WHERE e.project_id in (select t1.id from pm_project t1 where t1.parent_id='236aec01d88e48cdaaee357a870d18b5')
                AND    e.ea_type =1)  t3

三 如果你堅持需要將AND放在OR之后,那么,OR的兩邊應該用()括起來和AND並列

比如下面這個:

SELECT * from student WHERE id = 1 or id = 2 AND age = 20;

查詢出id是1或者2並且年齡是20的,那么很明顯結果:

上面查詢出來的是id=1的或者id為2並且年齡20的,如果想取唯一的並集,那么就需要這么寫

SELECT * from student WHERE (id = 1 or id = 2 ) AND age = 20;

這樣查出來的才是id為1或者2的並且年齡一定是20的!


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM