繁体   English   中英

比较SQL Server中同一表(或具有相同结构的不同表)中的行

[英]Compare rows in SQL Server in same table (or different tables with same structure)

我知道这是一个非常普遍的问题,但是我想知道SQL或其他外部工具中的选项,以比较同一SQL表或具有相同结构的2个表中的某些行。

该表包含大量列(60)

例如,假设我们有2个不同的行,它们具有相同的ID和相似的数据。

比较2时,结果中是否可能只是这些行之间的不同项?

例如:

Table : Col1 Col2 Col3 Col4 Col5 ....(until column 60)  
Row 1 : AAA  BBB  CCC  DDD  EEE  
Row 2 : AAA  BBB  CCC  DDD  DDD  

结果应返回Col5中存在差异,但其他均相同。

如前所述,这是一个非常开放的话题,但是我想知道您的建议。

您可以为此使用外部工具。 一种这样的工具是RedGate Data Compare。 它是付费的,但您可以尝试14天。

链接到Redgate数据比较

您可能要签出“ EXCEPT ”运算符。 除了显示两个表之间的差异。 结果将是第一个表中的记录。

SELECT tbl.* FROM (VALUES
  ( 1, 'AAA', 'BBB', 'CCC', 'DDD', 'EEE')
, ( 2, 'AAA', 'BBB', 'CCC', 'DDD', 'EEE')
, ( 3, 'AAA', 'BBB', 'CCC', 'DDD', 'EEE')
, ( 4, 'AAA', 'BBB', 'CCC', 'DDD', 'DDD')
) tbl ([ID], [Column2], [Column3], [Column4], [Column5], [Column6]) 
EXCEPT
SELECT tbl.* FROM (VALUES
  ( 1, 'AAA', 'BBB', 'CCC', 'DDD', 'EEE')
, ( 2, 'AAA', 'BBB', 'CCC', 'DDD', 'EEE')
, ( 3, 'AAA', 'BBB', 'CCC', 'DDD', 'EEE')
, ( 4, 'AAA', 'BBB', 'CCC', 'DDD', 'EEE')
) tbl ([ID], [Column2], [Column3], [Column4], [Column5], [Column6]) 

db <>小提琴

结果

或者,您可以对同一张表进行左联接。

;WITH
source_data
AS
(
    SELECT tbl.* FROM (VALUES
      ( 1, 'AAA', 'BBB', 'CCC', 'DDD', 'EEE')
    , ( 2, 'AAA', 'BBB', 'CCC', 'DDD', 'EEE')
    , ( 3, 'AAA', 'BBB', 'CCC', 'DDD', 'EEE')
    , ( 4, 'AAA', 'BBB', 'CCC', 'DDD', 'DDD')
    , ( 1, 'AAA', 'BBB', 'CCC', 'DDD', 'EEE')
    , ( 2, 'AAA', 'BBB', 'CCC', 'DDD', 'EEE')
    , ( 3, 'AAA', 'BBB', 'CCC', 'DDD', 'EEE')
    , ( 4, 'AAA', 'BBB', 'CCC', 'DDD', 'EEE')
    ) tbl ([ID], [Column2], [Column3], [Column4], [Column5], [Column6]) 
)
SELECT 
    tbl1.* 
FROM
    source_data AS tbl1
    LEFT JOIN source_data AS tbl2 ON tbl1.[ID] = tbl2.[ID]
WHERE 
    1=1
    AND 
    (
    tbl1.[Column2] != tbl2.[Column2]
    OR tbl1.[Column3] != tbl2.[Column3]
    OR tbl1.[Column4] != tbl2.[Column4]
    OR tbl1.[Column5] != tbl2.[Column5]
    OR tbl1.[Column6] != tbl2.[Column6]
    )

db <>小提琴

结果

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM