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

多条件AND过滤正常,单条件s.date_to='0000-00-00'返回全表数据

问题原因排查方案

以下是几个最可能的原因及验证方法:

  • service表所有记录的date_to本来就是0000-00-00
    当你加上s.court=13和s.place=7时,只是过滤掉了不符合这两个条件的记录,剩下的自然都满足date_to='0000-00-00';而当你只保留date_to条件时,所有记录都符合要求,所以返回全表数据。可以用这条SQL验证:

    SELECT DISTINCT date_to FROM `service`;
    

    如果结果只有0000-00-00,那就是这个原因。

  • date_to字段存在格式或类型问题
    如果date_to是VARCHAR类型而非DATE/DATETIME,可能存在隐形空格或格式不一致的情况(比如'0000-00-00 '带空格),但恰好符合s.court=13 AND s.place=7的记录没有这类问题。可以用修剪函数排查:

    SELECT * FROM `service` WHERE TRIM(date_to) != '0000-00-00';
    

    如果有返回结果,说明存在格式脏数据。

  • date_to包含NULL值且SQL_MODE未限制零日期
    若service表中date_to有NULL值,s.date_to='0000-00-00'不会过滤NULL行,但你说返回所有记录,大概率是NULL值占比极高。可以用这条SQL确认:

    SELECT COUNT(*) FROM `service` WHERE date_to IS NULL;
    

另外你提到换左连接没用,这是正常的——左连接只会保留service表的所有记录(即使关联表无匹配),但你的过滤条件是针对service表的date_to,写在WHERE子句里的话,连接类型不会影响这个条件的生效。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.02 02:33:33