如何比较表的整行与另一个表的整行

sql*_*bie 5 sql-server-2008

SQL Server中是否有一种方法可以将一个表的整行与另一个具有相同数据类型的表进行比较.

例:

CREATE TABLE [DBO].[PRODUCT]
  (
     [PID]  [INT] NULL,
     [NAME] [NCHAR](10) NULL,
     [PDID] [INT] NULL
  )
Run Code Online (Sandbox Code Playgroud)

select * from product p, product c where p.{entirerow} = c.{entirerow}

这里有什么选择吗?

Sim*_*mon 14

使用SQL INTERSECT(所有匹配的行)和EXCEPT(所有不同的行),例如:

SELECT * FROM Table1 INTERSECT SELECT * FROM Table2
SELECT * FROM Table1 EXCEPT SELECT * FROM Table2
Run Code Online (Sandbox Code Playgroud)

您可以通过使用WHERE子句将*替换为列列或行的子集来比较列的子集.

需要注意的是,表的模式必须相同.

  • 我知道这是旧的 - 但今天对我有用.Simon的答案是正确的:Intersect给出了匹配相同行的不同列表; 除了返回第一个表中的行,其中在第二个表中找不到相同的匹配项.理想情况下,如果您要搜索差异,则必须使用"除外"两次:表1除表2和表2外,表1除外.我希望我能将此标记为已解决. (2认同)