MySQLWhere子句不过滤数据

标签 mysql

我正在尝试执行以下查询。查询正在运行,但未将数据作为 where 子句进行过滤。我无法找出问题所在

提前致谢!

 SELECT
    case when count(*) = 1 then
    (select chacc from xxx_1 s inner join xxx_2 d on s.MCHRRN = rrn(d)
     where d.CHCHNO = dp.CHCHNO and d.CHBKBR = dp.CHBKBR AND d.CHBRCH = dp.CHBRCH AND
     s.MCHPNDT = st.MCHPNDT)
    else 1 end  as is_multiple,
    count(*) as ch_tot,
    dp.CHBRCH,
    dp.CHCHNO,
    dp.CHBKBR,
    SUM(dp.CHCHAM) as chq_amt_tot,
    st.MCHPNDT,
    dp.CHCHST
FROM xxx_3 st
INNER JOIN xxx_4 dp
    ON st.MCHRRN = RRN(dp)
WHERE st.MCHSTAT='P' AND st.MCHAPP IN (40,50) OR (st.MCHAPP = 26 AND st.MCHSVST = 1) AND
    dp.CHDWAC=29 AND dp.CHCHNO=5261 AND st.MCHPNDT BETWEEN 2018001 AND 2018100
GROUP BY dp.CHBRCH,dp.CHCHNO,dp.CHBKBR,dp.CHCHST,st.MCHPNDT
ORDER BY st.MCHPNDT ASC

最佳答案

我怀疑你只需要括号:

WHERE ( (st.MCHSTAT = 'P' AND st.MCHAPP IN (40, 50) ) OR
        (st.MCHAPP = 26 AND st.MCHSVST = 1)
      ) AND
      dp.CHDWAC = 29 AND
      dp.CHCHNO = 5261 AND
      st.MCHPNDT BETWEEN 2018001 AND 2018100

如果您在 bool 表达式中同时使用 ANDOR,我建议您始终使用括号。

关于MySQLWhere子句不过滤数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49752250/

相关文章:

mysql - 为什么 mysql 查询运行缓慢,即使语句上的解释另有说明?

mysql - 如何在 MySQL 中的列的所有值上向左移动一个点 6 个空格?

php - 今天的日期是否与数据库 PHP/MYSQL 中的现有范围相交

mysql - 在分层表结构中将父节点连接到子节点

mysql - SQL:首先显示 future 的记录,然后是其余的。均按 create_date DESC

php - 比较 mysql/symfony2 中的日期

mysql - 通过VLOOKUP清理SQL查询中的数据

mysql - LIKE 'xyz%' 的性能 v/s LIKE '%xyz'

php - 向论坛添加新主题

php - MYSQL:按周间隔分组,大于星期一