Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / SQL 2014 - Определить есть ли разница в содержимом таблиц / 7 сообщений из 7, страница 1 из 1
11.10.2018, 21:50
    #39716388
Blackmore
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
SQL 2014 - Определить есть ли разница в содержимом таблиц
Есть сервер, на к-ром в Table1 хранится около миллиарда записей. В таблице этой ключей нет, индексов тоже. Зато есть порядка 100 колонок. Есть таблица Table2, такая же по структуре (ни ключей, ни индексов, те же 100 колонок), куда пока накидали около 10 миллионов записей. Еще известно, что все 10 миллионов записей в Table2 получены из файла, который перед этим импортировался в Table1. Нужно средствами SQL (можно с подключением фич MSSQL до 2014 включительно) сравнить эти 10 миллионов с предполагаемыми эталонными 10 миллионами, лежащими уже в Table1 и сказать, идентичны они или нет. Показывать тех, кто неидентичен, не надо пока. Как это сделать?
...
Рейтинг: 0 / 0
11.10.2018, 22:15
    #39716398
invm
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
SQL 2014 - Определить есть ли разница в содержимом таблиц
Невозможно без наличия столбцов, идентифицирующих строку.

Можно так
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
select
 count(*)
from
 (
  select * from Table2
  intersect
  select * from Table1
 ) t

Если результат 10 миллионов, то, предположительно, идентичны.
...
Рейтинг: 0 / 0
11.10.2018, 22:35
    #39716402
Blackmore
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
SQL 2014 - Определить есть ли разница в содержимом таблиц
invmНевозможно без наличия столбцов, идентифицирующих строку.

Почему? Все 100 столбцов и есть "идентифицирующие строку". Т.е. 2 строки идентичны только тогда, когда ВСЕ 100 колонок попарно одинаковы.
...
Рейтинг: 0 / 0
12.10.2018, 00:42
    #39716426
PizzaPizza
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
SQL 2014 - Определить есть ли разница в содержимом таблиц
Blackmore,

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

Если да, то можно посмотреть в сторону BINARY_CHECKSUM.
Не знаю будет ли это быстрее, чем простое сравнение по колонкам, но если у вас там тексты, например, то будет.
...
Рейтинг: 0 / 0
12.10.2018, 04:38
    #39716440
Щукина Анна
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
SQL 2014 - Определить есть ли разница в содержимом таблиц
Blackmore,

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

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
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
       )
...
Рейтинг: 0 / 0
12.10.2018, 04:44
    #39716443
Щукина Анна
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
SQL 2014 - Определить есть ли разница в содержимом таблиц
Blackmore,

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



Пустое множество на выходе как раз и будет означать тот факт, что все строки в T2 имеют свой полный аналог в таблице T1.
Другое дело, что с дублями будет сложнее разобраться... Ибо все операции над множествами (кроме union ALL) - "игнорируют" дубли, накладывая, по сути, DISTINCT на результата своей работы...
...
Рейтинг: 0 / 0
12.10.2018, 04:51
    #39716444
982183
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
SQL 2014 - Определить есть ли разница в содержимом таблиц
BlackmoreНужно средствами SQL сравнить эти 10 миллионов с предполагаемыми эталонными 10 миллионами, лежащими уже в Table1 и сказать, идентичны они или нет. Показывать тех, кто неидентичен, не надо пока. Как это сделать?

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

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

Удалить из Table2 отсутствующие в Table1 или сформировать Table3 с идентичными?
...
Рейтинг: 0 / 0
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / SQL 2014 - Определить есть ли разница в содержимом таблиц / 7 сообщений из 7, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]