无需count查询SHIPMENT表中发运S2全部零件的发货商编号
符合要求的SQL查询方案
核心逻辑
这类「匹配全集」的需求在禁止用count的场景下,用双重NOT EXISTS的嵌套逻辑实现即可,本质是用反向排除替代计数校验:
我们要找的发货商,不存在「S2发运过的零件,该发货商没有发运」的情况,等价于该发货商覆盖了S2的全部发运零件。
可直接运行的查询语句
SELECT DISTINCT s1.ShipperNo FROM SHIPMENT s1 WHERE NOT EXISTS ( -- 取出S2发运的所有零件 SELECT 1 FROM SHIPMENT s2 WHERE s2.ShipperNo = 'S2' AND NOT EXISTS ( -- 校验当前外层的发货商是否发运了这个S2的零件 SELECT 1 FROM SHIPMENT s3 WHERE s3.ShipperNo = s1.ShipperNo AND s3.Parts = s2.Parts ) );
结果验证
对照你给出的测试数据,查询结果为:
| ShipperNo |
|---|
| S1 |
| S2 |
完全符合预期:S1发运了P1、P2,S2本身也覆盖了自己的全部零件,S3只发了P1、S4只发了P2都不满足要求。
内容的提问来源于stack exchange,提问作者user2977259
相关产品推荐
相关产品推荐

