Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 Проверка и вывод разницы строк двух таблиц  [new]
exw777
Member

Откуда:
Сообщений: 41
Привет!
Есть две таблицы, первая таблица
id_uniq_value
100 1 aaaaaa
100 2 bbbbb
100 3 cccccc
100 4 cccccc
200 1 aaaaaa
200 2 aaaaaa
200 3 bbbbbb
300 1 dddddd
400 1 dddddd
500 1 eeeeeee

и вторая

id_uniq_value
100 1 aaaaaa
100 2 bbbbb
100 3 cccccc
100 4 ccccccNEW
200 1 aaaaaa
200 2 aaaaaa
200 3 bbbbbb
300 1 dddddd
400 1 ddddddNEW
500 1 eeeeeee

Использовал запрос
SELECT * FROM 
  t2 db2tbl 
WHERE 
db2tbl.value not in (select t1.value from t1 )

union all

SELECT * FROM 
  t1 db1tbl 
WHERE 
db1tbl.value not in (select t2.value from t2 )

и похожий
SELECT * FROM 
 t2 db2tbl 
WHERE 
  not EXISTS
  ( 
      SELECT * 
      FROM t1 db1tbl 
      WHERE db1tbl.value
   = db2tbl.value 





Выводом получается
id_uniq_value
100 4 ccccccNEW
400 1 ddddddNEW

т.е. выводятся те строки, в которых присутствуют значения поля value таблицы t2 которых нет в t1, но не различные строки.
Вопрос как отсеять полностью идентичные строки чтобы вывелись только разные?
3 апр 14, 10:16    [15825496]     Ответить | Цитировать Сообщить модератору
 Re: Проверка и вывод разницы строк двух таблиц  [new]
Glory
Member

Откуда:
Сообщений: 104751
SELECT * FROM t2
EXCEPT
SELECT * FROM t1
3 апр 14, 10:19    [15825516]     Ответить | Цитировать Сообщить модератору
 Re: Проверка и вывод разницы строк двух таблиц  [new]
Кавказ-сила
Member

Откуда: Москва
Сообщений: 261
exw777
как отсеять полностью идентичные строки чтобы вывелись только разные?
select * from t1 except select * from t2 union all select * from t2 except select * from t1
3 апр 14, 10:21    [15825522]     Ответить | Цитировать Сообщить модератору
 Re: Проверка и вывод разницы строк двух таблиц  [new]
iap
Member

Откуда: Москва
Сообщений: 47145
Идентичные строки возвращает INTERSECT
Все строки - UNION ALL
Из всех вычесть идентичные - (UNION ALL) EXCEPT INTERSECT
SELECT * FROM T1 UNION ALL SELECT * FROM T2 EXCEPT SELECT * FROM T1 INTERSECT SELECT * FROM T2;
3 апр 14, 10:33    [15825583]     Ответить | Цитировать Сообщить модератору
 Re: Проверка и вывод разницы строк двух таблиц  [new]
exw777
Member

Откуда:
Сообщений: 41
Кавказ-сила,

union здесь странно работает

К сообщению приложен файл. Размер - 25Kb
3 апр 14, 10:34    [15825589]     Ответить | Цитировать Сообщить модератору
 Re: Проверка и вывод разницы строк двух таблиц  [new]
iap
Member

Откуда: Москва
Сообщений: 47145
exw777,

UNION имеет приоритет выше, чем EXCEPT
3 апр 14, 10:35    [15825598]     Ответить | Цитировать Сообщить модератору
 Re: Проверка и вывод разницы строк двух таблиц  [new]
iap
Member

Откуда: Москва
Сообщений: 47145
iap
exw777,

UNION имеет приоритет выше, чем EXCEPT
Приврал.
UNION и EXCEPT обрабатываются слева направо.
И именно поэтому в данном случае сначала выполняется UNION, а EXCEPT потом.
http://msdn.microsoft.com/ru-ru/library/ms188055(v=sql.100).aspx
3 апр 14, 11:41    [15826076]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить