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

SQL多条件连接如何处理含NULL值的列?

解决包含NULL值的联合字段左连接问题

问题的核心在于:SQL里NULL和任何值做等值比较(包括NULL本身)结果都是UNKNOWN,所以常规的ON t1.Customer = t2.Customer AND t1.Brand = t2.Brand AND t1.Model = t2.Model会自动过滤掉两边Model都是NULL的行。

下面分两种场景给出解决方案:

1. 支持标准SQL语法的数据库(如PostgreSQL、SQL Server 2022+、Oracle 12c+)

直接使用IS NOT DISTINCT FROM运算符,它会把NULL视为可匹配的相等值:

SELECT t1.*, t2.SaleID
FROM 表1 t1
LEFT JOIN 表2 t2
  ON t1.Customer = t2.Customer
  AND t1.Brand = t2.Brand
  AND t1.Model IS NOT DISTINCT FROM t2.Model;

2. 不支持IS NOT DISTINCT FROM的数据库(如老版本MySQL、MariaDB)

手动写条件同时处理非NULL等值和双NULL的情况:

SELECT t1.*, t2.SaleID
FROM 表1 t1
LEFT JOIN 表2 t2
  ON t1.Customer = t2.Customer
  AND t1.Brand = t2.Brand
  AND (t1.Model = t2.Model OR (t1.Model IS NULL AND t2.Model IS NULL));

用上面的代码执行后,就能正确关联到Max的记录(两边Model都是NULL的行),同时保留表1里Kayla这类在表2中没有匹配的行。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.14 02:50:26