mssql 比较两个表并且只比较 return 不相同的列

mssql compare two tables and only return non identical columns

我想知道 'table1' 和 'table2' 两个表是否相同。 我知道我可以比较 'where' 子句中两个表的每一列 所以这基本上会向我显示相同的每一行。

但我想知道哪些列是相同的。所以我认为只需转换表格并如前所述比较结果就很容易了。表中的列名和顺序与已经给出的相同。 我还制作了一个示例输入和输出场景:

--------输入-------------- 表 1

id col1 col2 col3
1 14 23 45
2 12 21 43
3 12 22 43
4 10 12 41
5 11 23 44
6 13 25 43

表 2

id col1 col2 col3
1 14 20 45
2 12 0 43
3 12 22 43
4 10 30 41
5 11 23 44
6 13 43

------------输出----------------

结果

col2
20
0
22
30
23

或结果

??? ??? ??? ??? ??? ??? ???
col2 20 0 22 30 23

或结果

col2

或结果

table1.col2 table2.col2
23 20
21 0
22 22
12 30
23 23
25

或类似的...... 不相同的列的值无关紧要我只需要列名,但我不在乎值是否会随之而来。希望不会太难

考虑到您真的只想接收相同的列,您可能想尝试使用 unpivot 的方法。下面举个例子:

DECLARE @t1 TABLE(
   id int
  ,col1 int
  ,col2 int
  ,col3 int
);

INSERT INTO @t1 VALUES
 (1,14,23,45)
,(2,12,21,43)
,(3,12,22,43)
,(4,10,12,41)
,(5,11,23,44)
,(6,13,25,43);

DECLARE @t2 TABLE(
   id int
  ,col1 int
  ,col2 int
  ,col3 int
);

INSERT INTO @t2 VALUES
 (1,14,20,45)
,(2,12,0,43)
,(3,12,22,43)
,(4,10,30,41)
,(5,11,23,44)
,(6,13,NULL,43);

WITH cte1 AS(
  SELECT id, col, val
    FROM (SELECT id, col1, col2, col3 FROM @t1) p
  UNPIVOT
    (val FOR col IN (col1, col2, col3)) as unpvt
),
cte2 AS(
  SELECT id, col, val
    FROM (SELECT id, col1, col2, col3 FROM @t2) p
  UNPIVOT
    (val FOR col IN (col1, col2, col3)) as unpvt
)
SELECT DISTINCT c1.id, c1.col, c1.val
  FROM cte1 c1
  INNER JOIN cte2 c2 ON c2.id = c1.id AND c2.col = c1.col AND c2.val = c1.val
  ORDER BY 1, 2