通过检查数组中是否存在所有值或不存在值来返回True或False(1或0)

时间:2019-06-27 18:16:24

标签: sql sql-server

目标:从采用列表的查询中返回true或false。如果列表中的项目不存在,那么我想返回false。如果它们都存在,我想返回true。

我所拥有的(一种):

SELECT DISTINCT id, sku
FROM items as items
WHERE items.sku IN ('a','b','c','doesntexist');

任何指导都会很棒。这是针对MSSQL的。

4 个答案:

答案 0 :(得分:1)

如果您具有列表先验列表,则可以对与其进行匹配的不同项目数,然后对其使用case

SELECT   id, CASE COUNT(DISTINCT sku) WHEN 4 THEN 1 ELSE 0 END AS all_exists
FROM     items 
WHERE    sku IN ('a', 'b', 'c', 'doesntexist') -- 4 items in the IN list:
GROUP BY id

答案 1 :(得分:1)

您可以使用列表中变量/项目数的计数,只需对照您的项目表进行检查即可。

if (select count(distinct sku) from items where sku IN ('a','b','c','doesntexist')) = 4
select 'True'
else
select 'False'

答案 2 :(得分:0)

您可以在项目数组上使用String-Split函数,以便随后可以进行OUTER JOIN或EXISTS()查询,以查看是否有String-Split返回的表中的任何成员没有表格中有一个匹配项。

答案 3 :(得分:0)

select IIF(count(*) = 4, 'true', 'false') from items where item in ('a','b','c','doesntexist');