SQL查询:根据另一列条件筛选不含产品C的ID列表
查询未关联指定产品的ID列表
现有一张包含ID、Product两个字段的关系表,表中存储了ID和对应关联产品的明细数据,具体内容如下:
| ID | Product |
|---|---|
| 001 | A |
| 001 | B |
| 001 | C |
| 002 | A |
| 002 | A |
| 002 | D |
| 003 | G |
| 003 | D |
| 003 | C |
| 004 | G |
| 004 | D |
| 004 | R |
需求为编写SQL,筛选出所有完全没有关联过产品C的ID,示例给出的参考预期结果包含002。
可用SQL写法
方法1:NOT IN 子查询
逻辑直观易读,先查出所有关联过产品C的ID集合,再从全量ID中排除这部分即可,加DISTINCT避免重复ID返回:
SELECT DISTINCT ID FROM 你的实际表名 WHERE ID NOT IN ( SELECT ID FROM 你的实际表名 WHERE Product = 'C' );
针对给出的测试数据,该语句会返回002和004两个ID,二者均不存在关联产品C的记录。
方法2:分组聚合判断
通过GROUP BY按ID分组,用聚合函数统计每个ID下是否存在产品C的关联记录,筛选统计值为0的ID即可,不需要嵌套子查询:
SELECT ID FROM 你的实际表名 GROUP BY ID HAVING COUNT(CASE WHEN Product = 'C' THEN 1 END) = 0;
两种写法返回结果一致,数据量较大时推荐第二种写法,查询性能更优。
内容的提问来源于stack exchange,提问作者Salvo Danilo
相关产品推荐
相关产品推荐

