zoukankan      html  css  js  c++  java
  • 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的!

  • 相关阅读:
    Qt double转换成Qstring
    QT 控件ComboBox
    前端web项目打包(二)
    前端Web打包成可执行程序
    div中下拉框无法点击展开跟选中
    div下多个table并排排列
    VS将数据保存在excel表格中
    关于windows下任务栏应用程序标签消失问题的解决办法
    Java8中map()和flatMap()的区别
    Java对象的深拷贝
  • 原文地址:https://www.cnblogs.com/houzheng/p/8944281.html
Copyright © 2011-2022 走看看