SQL:如何检查列表中的所有ID是否都在表中

时间:2016-12-13 13:32:13

标签: c# sql sqlite

首先,如果这个问题太明显,我很抱歉,因为我是SQL的新手。

所以,我有一个ID列表(变量,取决于用户选择的产品数量)。我想检查它们是否都在一张桌子里。如果其中一个不是,则查询结果应为null。如果所有这些都存在,则结果应该是这些ID所在的所有行。

我该怎么做?

祝你好运, 弗拉维奥

3 个答案:

答案 0 :(得分:0)

从列表中的LEFT JOIN到ID字段上的表格。如果没有记录,你将获得null

你甚至可以把像WHERE List.ID IS NULL这样的WHERE子句只看到那些不在表中的

编辑:当我写这个答案时,原始海报没有说他们正在使用C#

答案 1 :(得分:0)

UNTESTED:

不确定这是否最有效,但似乎它应该有效。

1,它会为您的列表生成表格中的项目计数。接下来,它将1结果记录连接到包含整个列表的查询,确保计数与您提供的列表中的计数匹配,并将结果限制在列表中。

SELECT * 
FROM Table
CROSS JOIN (
  SELECT count(*)  cnt
  FROM table
  WHERE ID in (yourlist)) b
WHERE b.cnt = yourCount
  and ID IN (YourList)

运行两个in语句似乎总体上非常缓慢;但是我编写SQL的第一步通常是获得有效的东西,然后在需要时寻求提高性能。

答案 2 :(得分:0)

将Ids列表放入表中,(可以将它们作为表变量参数传递给Stored proc),然后在存储过程中写入

假设来自C#的id列表在表变量@idList

Select * from myTable 
Where id in (Select id from @idList)
   and not exists 
     (Select * from @idList
      where id Not in 
         (Select id from myTable))