• 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的记录。

              

  • 相关阅读:
    hadoop-处理小文件
    hadoop 文件合并
    hadoop multipleoutputs
    超酷的 Vim 搜索技巧
    linux中DHCP服务配置文件/etc/dhcpd.conf详细说明
    cobbler启动问题
    MYSQL 5.5.32的单机多实例部署
    自动化运维之Cobbler自动化部署安装操作系统
    运维自动化之Cobbler系统安装使用详解[good]
    Cobbler自动部署主机系统
  • 原文地址:https://www.cnblogs.com/balllyh/p/14690471.html
Copyright © 2020-2023  润新知