如何用SQL筛选出关联code不含1或2的DISTINCT ID
筛选所有关联code均不为1或2的唯一ID
给定数据表:
ID | code ---------- 1 | 1 1 | 2 1 | 4 2 | 3 2 | 3 2 | 4
需求:找出所有满足「关联的所有code都不等于1或2」的唯一ID,预期结果为ID=2。
方法1:使用NOT EXISTS(逻辑直观,适合新手理解)
SELECT DISTINCT ID FROM your_table t1 WHERE NOT EXISTS ( SELECT 1 FROM your_table t2 WHERE t2.ID = t1.ID AND t2.code IN (1, 2) );
逻辑:逐个检查每个ID,只要该ID下不存在任何code为1或2的记录,就保留这个ID。
方法2:使用GROUP BY + HAVING(聚合统计方式)
SELECT ID FROM your_table GROUP BY ID HAVING SUM(CASE WHEN code IN (1, 2) THEN 1 ELSE 0 END) = 0;
逻辑:按ID分组后,统计每个ID下code为1或2的记录数量,数量为0说明该ID没有符合条件的code,符合要求。
两种方法都能得到预期的ID=2,你可以根据自己的习惯选择使用。
内容的提问来源于stack exchange,提问作者Ykwk
相关产品推荐
相关产品推荐

