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

Откуда:
Сообщений: 520
Есть сервер, на к-ром в Table1 хранится около миллиарда записей. В таблице этой ключей нет, индексов тоже. Зато есть порядка 100 колонок. Есть таблица Table2, такая же по структуре (ни ключей, ни индексов, те же 100 колонок), куда пока накидали около 10 миллионов записей. Еще известно, что все 10 миллионов записей в Table2 получены из файла, который перед этим импортировался в Table1. Нужно средствами SQL (можно с подключением фич MSSQL до 2014 включительно) сравнить эти 10 миллионов с предполагаемыми эталонными 10 миллионами, лежащими уже в Table1 и сказать, идентичны они или нет. Показывать тех, кто неидентичен, не надо пока. Как это сделать?
11 окт 18, 21:50    [21702003]     Ответить | Цитировать Сообщить модератору
 Re: SQL 2014 - Определить есть ли разница в содержимом таблиц  [new]
invm
Member

Откуда: Москва
Сообщений: 9127
Невозможно без наличия столбцов, идентифицирующих строку.

Можно так
select
 count(*)
from
 (
  select * from Table2
  intersect
  select * from Table1
 ) t
Если результат 10 миллионов, то, предположительно, идентичны.
11 окт 18, 22:15    [21702015]     Ответить | Цитировать Сообщить модератору
 Re: SQL 2014 - Определить есть ли разница в содержимом таблиц  [new]
Blackmore
Member

Откуда:
Сообщений: 520
invm
Невозможно без наличия столбцов, идентифицирующих строку.


Почему? Все 100 столбцов и есть "идентифицирующие строку". Т.е. 2 строки идентичны только тогда, когда ВСЕ 100 колонок попарно одинаковы.
11 окт 18, 22:35    [21702025]     Ответить | Цитировать Сообщить модератору
 Re: SQL 2014 - Определить есть ли разница в содержимом таблиц  [new]
PizzaPizza
Member

Откуда:
Сообщений: 309
Blackmore,

А у вас все записи в таблицах уникальные?

Если да, то можно посмотреть в сторону BINARY_CHECKSUM.
Не знаю будет ли это быстрее, чем простое сравнение по колонкам, но если у вас там тексты, например, то будет.
12 окт 18, 00:42    [21702074]     Ответить | Цитировать Сообщить модератору
 Re: SQL 2014 - Определить есть ли разница в содержимом таблиц  [new]
Щукина Анна
Member

Откуда:
Сообщений: 1466
Blackmore,

"сложить" две "разности" таблиц:

select *
  from ( -- Разность "T1 - T2"
         select 'Есть в T1, но нет в T2' as flag, * from T1
         EXCEPT
         select 'Есть в T1, но нет в T2' as flag, * from T2
       )
 UNION ALL
       ( -- Разность "T2 - T1"
         select 'Есть в T2, но нет в T1' as flag, * from T2
         EXCEPT
         select 'Есть в T2, но нет в T1' as flag, * from T1
       )
12 окт 18, 04:38    [21702097]     Ответить | Цитировать Сообщить модератору
 Re: SQL 2014 - Определить есть ли разница в содержимом таблиц  [new]
Щукина Анна
Member

Откуда:
Сообщений: 1466
Blackmore,

хотя, в вашем случае достаточно разности между сравниваемой таблицей и эталоном:
select * from t2
except
select * from t1


Пустое множество на выходе как раз и будет означать тот факт, что все строки в T2 имеют свой полный аналог в таблице T1.
Другое дело, что с дублями будет сложнее разобраться... Ибо все операции над множествами (кроме union ALL) - "игнорируют" дубли, накладывая, по сути, DISTINCT на результата своей работы...
12 окт 18, 04:44    [21702100]     Ответить | Цитировать Сообщить модератору
 Re: SQL 2014 - Определить есть ли разница в содержимом таблиц  [new]
982183
Member

Откуда: VL
Сообщений: 3350
Blackmore
Нужно средствами SQL сравнить эти 10 миллионов с предполагаемыми эталонными 10 миллионами, лежащими уже в Table1 и сказать, идентичны они или нет. Показывать тех, кто неидентичен, не надо пока. Как это сделать?


Какие такие "предполагаемыми эталонными 10 миллионами".
Если нет исходного "который перед этим импортировался "
То сравнивать надо наличие 10млн из Table2, в Table1

"Сравнить", это одно, а результат какой надо получить если не нужно показывать неидентичные?

Удалить из Table2 отсутствующие в Table1 или сформировать Table3 с идентичными?
12 окт 18, 04:51    [21702101]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить