我有一个场景,我必须在第一个表中搜索第1列的值,看它是否与另一个表中的某个值匹配。
这应该循环继续,直到比较第一个表的最后一行。
答案 0 :(得分:1)
不需要循环。您可以使用exists()
select *
from FirstTable
where exists (
select 1
from SecondTable
where FirstTable.Column1 = SecondTable.Column1
);
要找到相反的情况,第一个表中的行没有基于Column1的匹配项,您可以使用not exists()
select *
from FirstTable
where not exists (
select 1
from SecondTable
where FirstTable.Column1 = SecondTable.Column1
);
如果您想确定哪些行匹配,请不要使用:
select FirstTable.*
, MatchFound = case when x.Column1 is null then 'No' else 'Yes' end
, x.Column1
from FirstTable
outer apply (
select top 1
*
from SecondTable
where FirstTable.Column1 = SecondTable.Column1
) as x