检查两个表中的列组合是否匹配

时间:2016-12-14 12:22:14

标签: sql select compare sql-server-2016

我有两张桌子需要比较。首先,它必须比较test1列。如果第一个表中的值存在于第二个表中,反之亦然,则必须在结果中显示这些值。这需要针对每一栏进行。

例如:

first table:
------------------------------
| id | test1 | test2 | test3 | 
------------------------------
| 1  | 1     | 1     | 1     |
------------------------------
| 2  | 2     | 2     | 3     | 
------------------------------
| 3  | 3     | 3     | 3     | 
------------------------------
| 4  | 3     | 3     | 3     | 
------------------------------

second table:
------------------------------
| id | test1 | test2 | test3 | 
------------------------------
| 1  | 1     | 1     | 1     | 
------------------------------
| 2  | 2     | 2     | 2     | 
------------------------------
| 3  | 3     | 3     | 3     | 
------------------------------
| 4  | 3     | 3     | 3     | 
-------------------------------
| 5  | 3     | 9     | 3     |
------------------------------

结果将是:

------------------------------
| id | test1 | test2 | test3 | 
------------------------------
| 2  | 2     | 2     | *2*   |
------------------------------
| 2  | 2     | 2     | *3*   |
------------------------------
| 5  | 3     | *9*   | 3     | 
------------------------------

现在执行此操作的代码是:

SELECT dbo.first.[test1], dbo.first.[test2], dbo.first.[test3],
dbo.second.[test1], dbo.second.[test2], dbo.second.[test3] 
FROM dbo.first left join dbo.second on 
dbo.first.[test1]=dbo.second.[test1] and 
dbo.first.[test2]=dbo.second.[test2] and 
dbo.first.[test3]=dbo.second.[test3] 

但这并没有显示正确的结果。

提前感谢您的帮助。

1 个答案:

答案 0 :(得分:3)

因为您要处理所有列,exceptminus是最简单的方法。看起来您正在使用SQL Server,因此:

select *
from (select t1.* from t1
      except
      select t2.* from t2
     ) tt
union all
select *
from (select t2.* from t2
      except
      select t1.* from t1
     ) tt