我有一个 id 列表,我想在 mysql 表中查询表中不存在的 id。
例如
list_of_ids = [1,2,4]
mysql表
id
1
3
5
6
..
查询应该返回[2,4]
,因为这些是不在表中的 id
如果将 id 表示为派生表,则可以直接在 SQL 中执行此操作:
select list.val
from (select 1 as val union all
select 2 union all
select 4
) list left outer join
t
on t.id = list.val
where t.id is null;
SQL 并没有真正的“列表”类型,所以你的问题是模棱两可的。如果您的意思是逗号分隔的字符串,那么文本破解可能会起作用。如果你的意思是一张桌子,那么这样的东西可能会起作用。如果您正在构建 SQL 语句,我建议您沿着这条路线走,因为它应该更有效。
因为我们无法查看您的代码,所以我只能假设
还是试试这个
SELECT id FROM list_of_ids
WHERE id NOT IN (SELECT id
FROM table)
我希望这有帮助
有一个可怕的基于文本的 hack:
SELECT
substr(result,2,length(result)-2) AS notmatched
FROM (
SELECT
@set:=replace(@set,concat(',',id,','),',') AS result
FROM (
select @set:=concat(',',
'1,2,4' -- your list here
,',')
) AS setinit,
tablename --Your tablename here
) AS innerview
ORDER BY LENGTH(result)
LIMIT 1;