Mysql中 where和 And OR连用优先级问题

       去年在项目测试中,遇到一个Mysql查询问题。

    (1) 问题的现象是

              交易管理_交易申报_当天可以发布今日及未来日期的邀约需求,用户侧申报今日和未来日期的需求后,在交易申报页面查看详情

              比如:23,24,25有交易申报、23号申报失败Resp_status=3、24号申报成功Resp_status=1、25号申报中Resp_status=2

              切换到23号时,页面展示的是其他历史日期的数据。

      

      

  (2)问题的原因:

、       错误的SQL语句:

           SELECT * FROM market_demand_resp
          where run_date>='2021-04-23' and resp_status='0' OR resp_status='3' and tenant_id=1;

         这个语句执行的逻辑是:AND优先级大于OR优先级,所以先执行( run_date>='2021-04-23' and resp_status='0')得出查询结果AA,再执行( resp_status='3' and tenant_id=1)得出查询结果BB

         最后查询数据是AA和BB的并集。

          

  (3)修正后的SQL语句:     

          SELECT * FROM market_demand_resp
         where run_date>='2021-04-23' and (resp_status='0' or resp_status='3') and tenant_id=1;

         这个语句的执行逻辑是:加括号后,调整执行顺序,查询出>='2021-04-23' ,申报状态是0或者3且tenant_id=1的记录。

          

posted @ 2021-04-22 16:58  Balllyh  阅读(748)  评论(0编辑  收藏  举报