我有一个SQL查询,它执行以下操作:
SELECT * FROM myTable WHERE Id IN (574,575,576,577,578,579,580)
此查询返回它可以使用这七个ID
之一找到的所有记录。如果它找不到其中一个ID那么它只会返回较少的记录。
我真正需要的是它要么返回所有记录,要么返回NONE。
因此,如果它找不到IN
子句中存在的ID之一,那么它应该返回零记录。
我正在针对视图构建动态查询,因此我只能在WHERE
子句后添加自定义查询。
如何在一个查询中执行此操作?
答案 0 :(得分:1)
这似乎是一个奇怪的要求。但听起来你想要一个非相关的子查询来计算ID:
select t.*
from mytable t
where Id in (574, 575, 576, 577, 578, 579, 580) and
7 = (select count(distinct id)
from mytable
where Id in (574, 575, 576, 577, 578, 579, 580)
);
您可能实际上不想重复这些值,所以:
with t as (
select t.*
from mytable t
where Id in (574, 575, 576, 577, 578, 579, 580)
)
select t.*
from t
where 7 = (select count(distinct id) from t);
答案 1 :(得分:0)
如果将值放入表变量
,则可以使用一些花哨的连接DECLARE @list table(id int)
INSERT @list values(1),(574),(575),(576),(577),(578),(579),(580)
-- remarked row
--INSERT @list values(574),(575),(576),(577),(578),(579),(580)
DECLARE @mytable table(id int)
INSERT @mytable values(574),(575),(576),(577),(578),(579),(580),(581),(592)
SELECT mt.* FROM
@myTable mt
JOIN @list list on mt.id = list.id
WHERE not exists(SELECT id from @list EXCEPT SELECT id from @myTable)
结果返回0行。
如果您将标记的行用作testdata而不是
,则将返回7行