0

我有一个 id 列表,我想在 mysql 表中查询表中不存在的 id。

例如

list_of_ids = [1,2,4]

mysql表

id 
1
3
5
6
..

查询应该返回[2,4],因为这些是不在表中的 id

4

3 回答 3

0

如果将 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 语句,我建议您沿着这条路线走,因为它应该更有效。

于 2013-06-09T22:10:20.053 回答
0

因为我们无法查看您的代码,所以我只能假设

还是试试这个

    SELECT id FROM list_of_ids
    WHERE id NOT IN (SELECT id
                     FROM table)

我希望这有帮助

于 2013-06-09T21:10:07.250 回答
0

有一个可怕的基于文本的 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;
于 2013-06-09T21:40:16.283 回答