declare @q table (A int);
declare @a table (B int);
insert into @q select 1 union select 2 union select 3;
insert into @a select 0 union select 1 union select 2 union select 3 union select 4;
我想知道@ q列A的数据是否是@a列B的子集。
这会产生错误。
if (select A from @q) in (select B from @a)
print 'yes' else print 'no';
这有效,但它是找出的最好方法吗?
if (select count(*) from @q) = (select count(*) from @q inner join @a on A = B)
print 'yes' else print 'no';
或者有更好的方法吗?
答案 0 :(得分:2)
尝试使用EXCEPT。
SELECT ColumnA
FROM TableA
EXCEPT
SELECT ColumnB
FROM TableB
它将为您提供A中不属于B的所有内容的列表。
您可以将上面的结果插入表变量中,然后检查其COUNT(0 =子集,其他任何不是子集)。
答案 1 :(得分:0)
试试以下内容。这基本上可以查找@q中的任何内容,但不会查找@a中的任何内容。如果计数大于0,则返回否,否则是。
SELECT CASE
WHEN COUNT(*) > 0 THEN 'No'
ELSE 'Yes'
END
FROM @q q
LEFT JOIN @a a
ON q.A = a.B
WHERE a.B iS NULL
希望它有所帮助。