SQL Server - Как отобразить значения, которые отличаются в двух одинаковых таблицах - PullRequest
1 голос
/ 02 ноября 2011

У меня есть 2 таблицы в SQL Server (версия: 2008).Обе таблицы имеют схожую структуру.Вторая таблица имеет несколько дополнительных столбцов.Я хочу написать запрос, который отображает различия в этих таблицах (для соответствующих полей).Выходные данные должны отображать столбцы из обеих таблиц рядом (для сравнения).

Я попытался использовать EXCEPT, который отображает результаты из таблицы 1, которые не соответствуют результатам в таблице2.Но мне нужно отобразить оба результата рядом.

Спасибо.

Ответы [ 4 ]

0 голосов
/ 27 марта 2012
SELECT * FROM 
(
SELECT * FROM TABLE1
EXCEPT
SELECT * FROM TABLE2
) T1

UNION ALL

SELECT * FROM 
(
SELECT * FROM TABLE2
EXCEPT
SELECT * FROM TABLE1
) T2
0 голосов
/ 02 ноября 2011

Например, если у вас есть 2 таблицы, Products1 и Products2, обе с колонками Name, Price, Color и т. Д., И вы хотите перечислить все различные продукты, вы можете использовать это:

SELECT Name FROM Products1
UNION
SELECT Name FROM Products2

ИЛИ, вы можете использовать ключевое слово FULL JOIN, оно возвращает строки при совпадении в одной из таблиц.Например:

Таблица «Автомобили»:

P_Id  Name      Color  Quality  City
----  --------  -----  -------  -----------
1     BMW       Red    good     Las Vegas
2     Lexus     Blue   bad      Los Angeles
3     Mercedes  Green  good     MIami

Таблица «Заказы»:

O_Id  OrderNo  P_Id
----  -------  ----
1     123      3
2     234      3
3     345      1
4     456      1
5     689      18

Теперь мы хотим перечислить все автомобили и вселюди с их заказами.

Мы используем:

SELECT Cars.Name, Cars.Color, Orders.OrderNo
FROM Cars
FULL JOIN Orders
ON Cars.P_Id=Orders.P_Id
ORDER BY Cars.Name

Результат:

Cars      Color  OrderNo
--------  -----  -------
BMW       Red    345
BMW       Red    456
Mercedes  Green  123
Mercedes  Green  234
Lexus     Blue   -
-         -      689
0 голосов
/ 03 ноября 2011

Дайте этому шанс. Предполагается, что есть один столбец (a), который идентичен между таблицами, а остальные (b, c, ...) потенциально различны.

SELECT t1.a, t2.a, t1.b, t2.b, t1.c, t2.c, ...
FROM table1 t1
JOIN table2 t2
  ON t1.a = t2.a
  AND NOT (t1.b = t2.b AND t1.c = t2.c ...)
0 голосов
/ 02 ноября 2011

Вам просто нужно выбрать поля, которые вы хотите отобразить:

select t1.*, t2.*
  from table1 t1
 inner join table2 t2 on t1.ID = t2.ID
 where t1.field1 <> t2.field1 OR t1.field2 <> t2.field2
    OR ...
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...