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

多表筛选商品列表:获取无SupplierID=70记录的商品

问题分析

你的SQL核心问题出在**INNER JOIN SupplierData**这一步:

  • 它会先筛选出所有在SupplierData表中有记录(无论属于哪个供应商)的商品,之后再排除掉关联SupplierID=70的商品编号。
  • 这会导致两个不符合预期的结果:
    1. 那些在SupplierData表中完全没有任何供应商记录的商品,会被INNER JOIN直接过滤,根本出现在结果里;
    2. 对于有其他供应商记录但无70号供应商的商品,INNER JOIN会把这些其他供应商的对应行全部查出来,导致结果出现重复商品编号或多余的关联数据。

正确实现方法

方法1:LEFT JOIN + IS NULL

通过左连接仅关联SupplierID=70的记录,然后筛选出连接后无匹配结果的商品(即无70号供应商记录的商品):

SELECT a.artnr, a.ean
FROM ArticleDB AS a
LEFT JOIN SupplierData AS b 
  ON a.artnr = b.artnr AND b.SupplierID = 70
WHERE b.SupplierID IS NULL;

方法2:NOT EXISTS

直接判断当前商品在SupplierData中不存在SupplierID=70的记录,逻辑更直观,性能表现也更稳定:

SELECT a.artnr, a.ean
FROM ArticleDB AS a
WHERE NOT EXISTS (
    SELECT 1
    FROM SupplierData AS b
    WHERE b.artnr = a.artnr AND b.SupplierID = 70
);

这两种方法都能准确获取所有无70号供应商记录的商品,既不会过滤掉完全没有供应商记录的商品,也不会拉出多余的其他供应商关联行。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.25 08:54:20