You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

SQL查询WHERE条件被忽略,始终返回全部结果问题求助

问题分析与解决
  • 核心原因:逻辑运算符优先级错误
    SQL中AND的优先级高于OR,你的原语句里,OR会将前面的条件拆分,最终逻辑等价于:
    (EXISTS(...) AND created_at LIKE '2023-04-04%') OR updated_at LIKE '2023-04-04%'
    这意味着只要updated_at匹配日期条件,无论前面的EXISTS子查询是否成立,都会返回对应行,导致WHERE条件被“忽略”的假象。

  • 修正方案
    用括号包裹日期相关条件,确保它们与前面的EXISTS子查询是“且”的关系:

    SELECT `status`, count(*) AS count
    FROM `wa_re_jo`
    WHERE
        EXISTS (
            SELECT *
            FROM `ad_ac_wa`
            WHERE `plattform` = 'adwords'
            AND `wa_re_jo`.`watchlist_id` = `ad_ac_wa`.`id`
            AND EXISTS (
                SELECT *
                FROM `ad_cu_ac`
                WHERE `ad_ac_wa`.`external_id` = `ad_cu_ac`.`externalId`
                AND EXISTS (
                    SELECT *
                    FROM `ç`
                    -- 注意:此处关联条件疑似错误,同一表字段相等大概率不符合业务预期
                    -- 建议修正为关联`ç`表的对应字段,比如 `ç.id = ad_cu_ac.adwords_customer_account_id`
                    WHERE `ad_cu_ac`.`id` = `ad_cu_ac`.`adwords_customer_account_id`
                    AND `startDate` <= '2023-04-04'
                    AND `endDate` + interval 1 DAY >= '2023-04-04'
                )
            )
        )
    AND (
        `created_at` LIKE '2023-04-04%'
        OR `updated_at` LIKE '2023-04-04%'
    )
    GROUP BY `status`
    
  • 额外优化建议

    1. 处理日期字段时,避免用LIKE,改用DATE()函数更准确高效:
      DATE(`created_at`) = '2023-04-04' OR DATE(`updated_at`) = '2023-04-04'
      
      若created_at和updated_at为datetime类型,该写法更清晰,还能利用字段索引(如果存在)。
    2. 检查最内层子查询的关联条件:ad_cu_ac.id = ad_cu_ac.adwords_customer_account_id是同一表字段相等,除非业务逻辑明确要求,否则大概率是笔误,需修正为关联ç表的对应字段。
    3. 表名ç疑似输入错误,建议确认是否为正确表名。

内容的提问来源于stack exchange,提问作者spyro95

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.26 02:07:08