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

              

  • 相关阅读:
    -Dmaven.multiModuleProjectDirectory system property is not set. Check $M2_HOME environment variable and mvn script match.chan
    failed to export application
    IOS InHouse 发布流程
    BoneCP学习笔记
    form表单, css1
    HTTP协议, HTML
    自定义ORM框架
    数据库5
    数据库4
    数据库3
  • 原文地址:https://www.cnblogs.com/balllyh/p/14690471.html
Copyright © 2011-2022 走看看