MySQL查询以查找表中不存在的ID

MySQL查询以查找表中不存在的ID,mysql,Mysql,我有一个预先生成的ID列表,我需要检查它是否存在于表中。我的表有两列,id,name,其中id是一个自动递增的整数,name是一个varchar(255) 我基本上想从预先生成的列表中获得表foo中不存在的ID数。假设我的列表中有数字5和10,那么写东西的最佳方式是什么 从foo中选择count(*),其中(5,10)中不存在id 这里的想法是,如果5和10不存在,我需要的是响应2,而不是foo中没有id5或10的行数。您可以使用union和a left join动态使用表 select cou

我有一个预先生成的ID列表,我需要检查它是否存在于表中。我的表有两列,
id
name
,其中
id
是一个自动递增的整数,
name
是一个
varchar(255)

我基本上想从预先生成的列表中获得表
foo
中不存在的ID数。假设我的列表中有数字
5
10
,那么写东西的最佳方式是什么

从foo中选择count(*),其中(5,10)中不存在id


这里的想法是,如果5和10不存在,我需要的是响应
2
,而不是
foo
中没有
id
5或10的行数。

您可以使用union和a left join动态使用表

select count(*) 
from my_table as m
left join ( 
    select 5 as id from dual 
    union 
    select 10 from dual ) t on t.id = m.id
where t.id is null
否则,可以使用所需的值填充节奏表,并使用left join
其中该值为空

TL;DR示例数据和查询

这里的想法是,如果5和10不存在,我需要响应2,而不是foo中没有id 5或10的行数

您应该提供更多的信息以避免混淆

范例

id | name
 1 | tom
 2 | joe
 3 | mae
 4 | goku
 5 | vegeta
如果您的列表包含
(1、2、3)
,那么您的答案应该是0(因为这三个都在表中)

如果您的列表包含
(1,2,6)
,那么您的答案应该是1。(因为1和2在表中,但6不在表中)

如果您的列表包含
(1,6,7)
,那么您的答案应该是2

如果您的列表包含
(6、7、8)
,那么您的答案应该是3

假设这是你的问题

如果你知道你名单的长度

select 2 - count(*) as my_count from foo where id in (5, 10)
下面的查询告诉您foo中存在多少个

select count(*) from foo where id in (5,10) 
所以,如果你想找到那些不存在的,从列表的长度中减去这个结果

select n - count(*) as my_count from foo where id in (5, 10,....)

我不得不编辑我的帖子,我需要的不是那些不匹配的行,而是列表中有多少行不匹配的计数。因此,如果5和10不存在,查询将返回
2
我已经更改了我的答案如何
从foo中选择count(*),其中id不在(5,10)
@Drew中,讽刺没有帮助。@BillKarwin这有点幽默