2016-12-14 3 views
1

У меня есть две таблицы, которые я хочу сравнить. Сначала нужно сравнить столбец 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] 

Но это разве показ правильный результат.

Заранее благодарим за помощь.

ответ

3

Поскольку вы имеете дело со всеми столбцами, except или minus является самым простым способом. Похоже, вы используете 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 
Смежные вопросы