首先,如果这个问题太明显,我很抱歉,因为我是SQL的新手。
所以,我有一个ID列表(变量,取决于用户选择的产品数量)。我想检查它们是否都在一张桌子里。如果其中一个不是,则查询结果应为null。如果所有这些都存在,则结果应该是这些ID所在的所有行。
我该怎么做?
祝你好运, 弗拉维奥
答案 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))