我有一个预先生成的ID列表,我需要检查是否存在于表中。我的表格有两列,id
,name
,其中id
是自动增量整数,name
是varchar(255)
。
我基本上想要从预先生成的列表中计算表foo
中不存在多少个ID。所以说我的列表中包含数字5
和10
,这是编写内容的最佳方式:
select count(*) from foo where id does not exist in ( 5, 10 )
这里的想法是,如果5和10不存在,我需要回复2
,而不是foo
中没有id
5的行数或者10。
答案 0 :(得分:2)
TL; DR样本数据和查询at rextester
这里的想法是,如果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,....)
答案 1 :(得分:1)
您可以使用union和左连接在飞行表上使用
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
否则你可以用你需要的值填充一个速度表并使用左连接 值为null
答案 2 :(得分:0)
select count(*) from foo where id not in ( 5, 10 )
答案 3 :(得分:0)
SELECT COUNT(*)FROM foo WHERE id not in(5,10);