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

SQL查询求助:获取无typeA记录的ID的实现方法

嘿Jan,我来帮你解决这个SQL查询的问题!要找出那些没有typeA记录的ID,这里有几种实用的方法,你可以根据自己的数据库和表结构选择合适的:

方法1:使用NOT EXISTS(推荐,性能较好)

这种方法通过子查询检查每个ID是否存在typeA记录,不存在的就保留下来:

SELECT DISTINCT t.ID
FROM your_table t
WHERE NOT EXISTS (
    SELECT 1
    FROM your_table t2
    WHERE t2.ID = t.ID
      AND t2.type = 'typeA'
);

这里的DISTINCT是为了避免同一个ID被重复返回(比如你的ID2有两条非typeA记录,不加的话会输出两次2)。如果你的ID在表中每个值只对应一条记录,也可以去掉DISTINCT。

方法2:LEFT JOIN + IS NULL

另一种常用的方式是左连接自身表,过滤掉匹配到typeA的记录:

SELECT DISTINCT t.ID
FROM your_table t
LEFT JOIN your_table t2
  ON t.ID = t2.ID
  AND t2.type = 'typeA'
WHERE t2.ID IS NULL;

原理是:左连接会保留左表的所有记录,当某个ID没有对应的typeA记录时,右表的字段都会是NULL,我们只要筛选出这些记录就行。

方法3:使用NOT IN

如果你的数据里不会出现NULL值,也可以用NOT IN来实现:

SELECT DISTINCT ID
FROM your_table
WHERE ID NOT IN (
    SELECT ID
    FROM your_table
    WHERE type = 'typeA'
);

先通过子查询找出所有有typeA的ID,再筛选不在这个集合里的ID。不过要注意:如果子查询返回的ID包含NULL,NOT IN会导致整个结果为空,所以这种方法不如前两种可靠。

这几种方法都能返回你要的ID2和3,你可以测试一下哪种更适合你的场景~

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.20 11:37:29