MySQL查询以查找表中不存在的ID
我有一个预先生成的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
,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这有点幽默