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

MYSQL中LEFT JOIN无法过滤Void状态的问题求助

解决MySQL LEFT JOIN排除关联表特定状态的问题

你的原语句问题出在WHERE T2."Status" <> 'Void'这个条件上——当T1没有匹配的T2记录时,T2的所有字段(包括Status)都是NULL,而NULL和任何值做比较结果都不成立,所以这些T1的记录会被过滤掉,不符合你"保留Table 1所有数据"的需求。

给你两种可行的写法:

方法一:将过滤条件移到JOIN的ON子句中

SELECT *
FROM `Table 1` T1
LEFT JOIN `Table 2` T2 
  ON T1.ID = T2.ID 
  AND T2.`Status` <> 'Void';

这样LEFT JOIN只会关联T2中Status不等于'Void'的记录,T1的所有行都会被保留,没有符合条件的T2关联时,T2字段显示为NULL。

方法二:在WHERE子句中兼容NULL情况

SELECT *
FROM `Table 1` T1
LEFT JOIN `Table 2` T2 ON T1.ID = T2.ID
WHERE T2.`Status` <> 'Void' OR T2.`Status` IS NULL;

这里明确允许两种情况:要么T2的Status不是'Void',要么T2没有匹配记录(Status为NULL),这样就能保留所有T1数据,同时排除T2中Status为'Void'的关联行。

注:MySQL中带空格的表名/字段名建议用反引号``包裹,比双引号兼容性更好,除非你开启了ANSI_QUOTES模式。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.08 03:40:22