如何从数字列表中查询数据库未包含的用户ID
找出列表中未存在于Users表的ID
方法一:使用EXCEPT关键字(推荐)
通过VALUES子句将你的ID列表构造成临时数据集,再与Users表的Id字段做差集运算,得到不在表中的ID:
SELECT Id FROM ( VALUES (1), (9), (12), (22), (109) ) AS TargetIds(Id) EXCEPT SELECT Id FROM Users;
EXCEPT会自动去除重复项,仅返回存在于临时数据集但不存在于Users表中的ID,完全匹配你的需求。
方法二:使用LEFT JOIN筛选匹配失败项
如果对JOIN逻辑更熟悉,可以用LEFT JOIN保留所有目标ID,再筛选出Users表中无法匹配的记录:
SELECT t.Id FROM ( VALUES (1), (9), (12), (22), (109) ) AS t(Id) LEFT JOIN Users u ON t.Id = u.Id WHERE u.Id IS NULL;
当LEFT JOIN无法找到匹配的Users记录时,u.Id会返回NULL,筛选这些记录即可得到未录入的ID。
兼容低版本MySQL的写法
如果你的MySQL版本低于8.0,不支持VALUES子句构造临时表,可以用UNION ALL拼接ID:
EXCEPT版本:
SELECT 1 AS Id UNION ALL SELECT 9 UNION ALL SELECT 12 UNION ALL SELECT 22 UNION ALL SELECT 109 EXCEPT SELECT Id FROM Users;
LEFT JOIN版本:
SELECT t.Id FROM ( SELECT 1 AS Id UNION ALL SELECT 9 UNION ALL SELECT 12 UNION ALL SELECT 22 UNION ALL SELECT 109 ) AS t LEFT JOIN Users u ON t.Id = u.Id WHERE u.Id IS NULL;
内容的提问来源于stack exchange,提问作者IOEnthusiast
相关产品推荐
相关产品推荐

