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

SQL如何查询无匹配关联行的记录?编写的查询返回空是什么原因

问题原因分析

你编写的SQL使用了INNER JOIN,该关联逻辑仅会返回两张表在关联字段t1.ID = t2.salesperson_id上完全匹配的记录。所有能进入结果集的行,t2.salesperson_id必然存在有效值,不可能为NULL,因此后续的WHERE筛选条件永远无法满足,自然不会返回任何结果。

正确实现方案

要找出没有匹配订单的销售记录,可以使用以下三种常见实现方式:

  • 方案1:LEFT JOIN(最常用,兼容性最好)
    LEFT JOIN会保留左表(Salesperson)的全部记录,右表Orders没有匹配项时,对应的所有字段会自动填充为NULL,此时筛选右表关联字段为NULL的行即可:
SELECT * 
FROM Salesperson t1
LEFT JOIN Orders t2 ON t1.ID = t2.salesperson_id
WHERE t2.salesperson_id IS NULL
  • 方案2:NOT EXISTS
    逻辑更直观,直接筛选不存在对应订单的销售记录:
SELECT * 
FROM Salesperson t1
WHERE NOT EXISTS (
    SELECT 1 FROM Orders t2 
    WHERE t2.salesperson_id = t1.ID
)
  • 方案3:NOT IN
    使用时需要注意排除子查询中salesperson_id为NULL的情况,否则会导致整个查询无结果:
SELECT * 
FROM Salesperson
WHERE ID NOT IN (
    SELECT salesperson_id FROM Orders 
    WHERE salesperson_id IS NOT NULL
)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.07 12:18:02