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

              

  • 相关阅读:
    kafka系列教程5(客户端实践)
    log4j示例-Daily方式(log4j.properties)
    Log4j.xml配置(rolling示例)
    Log4j配置详解之log4j.xml
    kafka 常用命令
    linux下进程cpu占用过高问题定位方法
    Linux 操作系统主机名变成bogon怎么解决?
    网络基础 Windows控制台下Ftp使用简介
    网络基础 cookie详解
    网络基础 http 会话(session)详解
  • 原文地址:https://www.cnblogs.com/balllyh/p/14690471.html
Copyright © 2011-2022 走看看