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

在MySQL表中查询指定ID列表里不存在的ID

嘿,我来帮你搞定这个问题!要从指定的ID列表[1,2,3,4,5,6,7,8,9]里找出tbl表中不存在的ID,有几个简单好用的方法:

方法一:用UNION ALL构造ID集合并左连接

这是兼容性最好的写法,几乎所有MySQL版本都支持。先把你要检查的所有ID通过UNION ALL拼成一个临时数据集,再和tbl表做左连接,筛选出没有匹配上的记录即可:

SELECT target_ids.id AS missing_id
FROM (
    SELECT 1 AS id UNION ALL
    SELECT 2 UNION ALL
    SELECT 3 UNION ALL
    SELECT 4 UNION ALL
    SELECT 5 UNION ALL
    SELECT 6 UNION ALL
    SELECT 7 UNION ALL
    SELECT 8 UNION ALL
    SELECT 9
) AS target_ids
LEFT JOIN tbl ON target_ids.id = tbl.id
WHERE tbl.id IS NULL;

解释:左连接会保留target_ids里的所有记录,当某个ID在tbl中不存在时,对应的tbl.id会是NULL,通过WHERE tbl.id IS NULL就能精准筛选出这些缺失的ID。

方法二:MySQL 8.0+ 可用的VALUES子句简化写法

如果你的MySQL版本是8.0及以上,可以用VALUES子句更简洁地构造ID集合:

SELECT id AS missing_id
FROM (VALUES ROW(1), ROW(2), ROW(3), ROW(4), ROW(5), ROW(6), ROW(7), ROW(8), ROW(9)) AS target_ids(id)
LEFT JOIN tbl USING(id)
WHERE tbl.id IS NULL;

这个写法比UNION ALL更紧凑,代码可读性更高。

方法三:NOT IN 写法(适合ID非空场景)

因为你的tbl.id是NOT NULL的,也可以用NOT IN来实现,但要注意如果tbl.id允许为空的话,这个方法会返回空结果,所以只适合非空ID的场景:

SELECT id AS missing_id
FROM (
    SELECT 1 AS id UNION ALL
    SELECT 2 UNION ALL
    SELECT 3 UNION ALL
    SELECT 4 UNION ALL
    SELECT 5 UNION ALL
    SELECT 6 UNION ALL
    SELECT 7 UNION ALL
    SELECT 8 UNION ALL
    SELECT 9
) AS target_ids
WHERE id NOT IN (SELECT id FROM tbl);

根据你提供的tbl数据,执行以上任意一种方法,都会得到结果:2,3,5,6,7,9,这些就是列表中不存在于表内的ID。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.26 11:08:11