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

使用Toad实现SQL查询:Table1有Item且Table2同Mfg Number全无Item的记录

正确实现SQL查询:筛选Table2中对应Mfg Number全为空Item number的记录

需求回顾

  • 从Table1中选取自身Item number不为空的Mfg Number
  • 仅保留那些在Table2中所有对应记录的Item number均为空的Mfg Number

原SQL问题分析

你原来的SQL语句会错误返回Mfg Number=1和2,原因是它仅关联了Table2中存在空Item number的记录,但没有排除Table2中同时存在非空Item number的Mfg Number。比如Mfg Number=1在Table2里既有非空记录也有空记录,原语句会把空记录和Table1关联,导致不符合要求的记录被返回。

正确实现方法

方法1:使用NOT EXISTS子查询(推荐,性能更优)

SELECT DISTINCT t1.*
FROM Table1 t1
WHERE t1.`Item number` IS NOT NULL
AND NOT EXISTS (
    SELECT 1
    FROM Table2 t2
    WHERE t2.`Mfg Number` = t1.`Mfg Number`
    AND t2.`Item number` IS NOT NULL
);

逻辑说明:

  1. 先筛选Table1中Item number非空的记录
  2. 通过NOT EXISTS检查:如果Table2中不存在当前Mfg Number对应的非空Item number记录,说明该Mfg Number在Table2中所有Item number都是空,符合需求

方法2:使用GROUP BY + HAVING筛选

SELECT t1.*
FROM Table1 t1
INNER JOIN (
    SELECT `Mfg Number`
    FROM Table2
    GROUP BY `Mfg Number`
    HAVING COUNT(`Item number`) = 0
) t2_filtered ON t1.`Mfg Number` = t2_filtered.`Mfg Number`
WHERE t1.`Item number` IS NOT NULL;

逻辑说明:

  1. 子查询对Table2按Mfg Number分组,COUNT(Item number)会自动忽略NULL值,结果为0说明该分组下所有Item number都是空
  2. 将筛选后的Mfg Number和Table1关联,得到最终符合条件的记录

示例数据验证

针对你的示例数据:

  • Mfg Number=1:Table2存在非空Item number,被排除
  • Mfg Number=2:Table2所有Item number为空,会被返回
  • Mfg Number=3:Table2全为非空Item number,被排除

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.09 06:01:47