比较SQL Server中第二个表中的每个行值?

时间:2017-01-18 13:23:16

标签: sql sql-server sql-server-2012

我有一个场景,我必须在第一个表中搜索第1列的值,看它是否与另一个表中的某个值匹配。

这应该循环继续,直到比较第一个表的最后一行。

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