MySQL查询以查找表

时间:2016-09-23 19:28:48

标签: mysql

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

我基本上想要从预先生成的列表中计算表foo中不存在多少个ID。所以说我的列表中包含数字510,这是编写内容的最佳方式:

select count(*) from foo where id does not exist in ( 5, 10 )

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

4 个答案:

答案 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);