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

Откуда:
Сообщений: 17
Задача : Есть две таблицы - 1) Рабочая таблица 2) Резервная копия
Нужно проверить одинаковы таблицы или нет????????
16 сен 03, 17:40    [341249]     Ответить | Цитировать Сообщить модератору
 Re: Как сравнить две таблицы  [new]
Карч
Guest
Если это задача для будущих таблиц и состоит она в проверке того, обновлялись ли данные в таблице, то можно ввести в таблицу поле типа timestamp и дальше плясать от него.
16 сен 03, 17:50    [341273]     Ответить | Цитировать Сообщить модератору
 Re: Как сравнить две таблицы  [new]
ziktuw
Member

Откуда:
Сообщений: 3552
если кол-ва записей различаются, то ответ очевиден.
если кол-во записей одинаково, то сравни кол-во записей у одной таблицы с кол-вом записей объединения (через UNION) этих таблиц. Если данные идентичны, эти количества записей совпадут.
16 сен 03, 17:52    [341280]     Ответить | Цитировать Сообщить модератору
 Re: Как сравнить две таблицы  [new]
vova_braha
Member

Откуда:
Сообщений: 17
Нет, мне нужно визуально открыв, например, Enterprise Manager проверить одинаковы ли две таблицы?
16 сен 03, 17:52    [341284]     Ответить | Цитировать Сообщить модератору
 Re: Как сравнить две таблицы  [new]
KOLCHOZ_POSTEVENT
Guest
Слей обе в одну вспомагашку ,а потом дёрни её select distinct,если количество строк выросло-туши свет.
Если в них изначала двойные строки додумывай сам.Я тороплюсь.
16 сен 03, 17:53    [341286]     Ответить | Цитировать Сообщить модератору
 Re: Как сравнить две таблицы  [new]
Berg
Member

Откуда: Кр-ск
Сообщений: 3480
2vova_braha:
А если нужно визуально в EM, то в чем проблема? У вас отсутствуют органы зрения?

P.S. Лучше бы вам воспользоваться предложенным выше, а то будет как в анекдоте: "Вот сиди и складывай..."
16 сен 03, 18:09    [341316]     Ответить | Цитировать Сообщить модератору
 Re: Как сравнить две таблицы  [new]
Dr.Lightman
Member

Откуда: Sevastopol, Crimea
Сообщений: 31
2KOLCHOZ_POSTEVENT
Отличная мысль!!!

Предположим что есть две идентичные по структуре таблицы A и B с атрибутами C,D,E.

select c, d, e
from (
select c,d,e from a
union all
select c,d,e from b) both
group by c, d, e
having count(*) < 2

Получим все уникальные (несимметричные) наборы атрибутов C,D,E, т.е. вставленные, удаленные, измененные... правда без указания на таблицу, что тоже не сложно.

Однако vova не полностью сформулировал свою задачу.
Поиск удалений из таблицы А с использованием бакапа В
select B.*
from B left join A on A.key = B.key
where A.key Is Null

Поиск вставок и изменений в таблице А с использованием бакапа В
select А.*
from А left join B on A.key = B.key and A.field1 = B.field1 and A.field2 = B.field2...
where b.key Is Null
16 сен 03, 19:54    [341471]     Ответить | Цитировать Сообщить модератору
 Re: Как сравнить две таблицы  [new]
B0rG
Member

Откуда: столичный город кудаблин
Сообщений: 619
В EM пимпочка есть, на ней написано SQL
геморой конечно, но юзабельно.

Я бы Вам книжку какую про SQL порекомендовал, но к сожалению хороших не знаю.
16 сен 03, 20:05    [341481]     Ответить | Цитировать Сообщить модератору
 Re: Как сравнить две таблицы  [new]
Crimean
Member

Откуда:
Сообщений: 13147
checksum( fields ) поможет :)
три этапа:
1.проверяем, есть ли в Б "лишние" записи, то есть те, которых нет в А
2.проверяем, есть ли в А "лишние" записи, то есть те, которых нет в Б
3.проверяем по ПК равны ли checksum( * ) если нет , получаем список ПК , для которых есть расхождения и уточняем поля
фсе. метод работает для таблиц с одинаковой структурой.
для таблиц с неодинаковой структурой можно через syscolumns выделить поля с одинаковыми именами и делать checksum для них.
16 сен 03, 20:05    [341482]     Ответить | Цитировать Сообщить модератору
 Re: Как сравнить две таблицы  [new]
Владимирм_2
Member

Откуда: Город корабелов ->Calgary (Alberta), Canada
Сообщений: 187
Если нет времени(или сил) самому что-то придумать, можно взять фишку отсюда:
http://www.red-gate.com/downloadbundle.asp
14 дней полностью работоспособная версия.....
16 сен 03, 20:43    [341515]     Ответить | Цитировать Сообщить модератору
 Re: Как сравнить две таблицы  [new]
Белов Владимир
Member

Откуда: Москва
Сообщений: 1718
Как вариант сделать
left join
rigth join
и смотреть значения NULL
16 сен 03, 21:11    [341545]     Ответить | Цитировать Сообщить модератору
 Re: Как сравнить две таблицы  [new]
Alex Antonoff
Member

Откуда: Из лесу вестимо
Сообщений: 1251
Если визуально смотреть то лучше использовать full outer join
17 сен 03, 06:25    [341683]     Ответить | Цитировать Сообщить модератору
Между сообщениями интервал более 1 года.
 Re: Как сравнить две таблицы  [new]
Човайохоя
Guest
Воскрешу тему...
Dr.Lightman
2KOLCHOZ_POSTEVENT
Отличная мысль!!!

Предположим что есть две идентичные по структуре таблицы A и B с атрибутами C,D,E.

select c, d, e
   from (
      select c,d,e from a
      union all
      select c,d,e from b) both
   group by c, d, e
   having count(*) < 2


Получим все уникальные (несимметричные) наборы атрибутов C,D,E, т.е. вставленные, удаленные, измененные... правда без указания на таблицу, что тоже не сложно.

Однако vova не полностью сформулировал свою задачу.
Поиск удалений из таблицы А с использованием бакапа В
select B.*
from B left join A on A.key = B.key
where A.key Is Null

Поиск вставок и изменений в таблице А с использованием бакапа В
select А.*
from А left join B on A.key = B.key and A.field1 = B.field1 and A.field2 = B.field2...
where b.key Is Null
У меня та же задача, попробовал этот с виду маленький запрос - вроде то, что надо.
Не мог бы кто-нибудь по-русски разъяснить логику этого запроса ?
До having count(*) < 2 вроде бы понятно, но с having count(*) < 2 не очень, почему именно 2 ?
Простите, если глупый вопрос, постоянно не имею дело с SQL.

И самый главный вопрос - про колонку с указанием имени таблицы... автор запроса пишет, что это не сложно. Не подскажите как ?
У самого изначально была мысль о колонке со значениями << / >> , т.е. указатели направления куда что требуется добавить, но имена таблиц (желательно полностью, включая имя БД) было бы гораздо лучше.
28 янв 12, 17:08    [11989225]     Ответить | Цитировать Сообщить модератору
 Re: Как сравнить две таблицы  [new]
Човайохоя
Guest
Кстати, ссылка из п. 9 ТОП 10 самых популярных вопросов у меня не работает. Что там было хоть ?
28 янв 12, 17:09    [11989228]     Ответить | Цитировать Сообщить модератору
 Re: Как сравнить две таблицы  [new]
Човайохоя
Guest
Забыл добавить - у меня SQL Server 2000
28 янв 12, 17:12    [11989229]     Ответить | Цитировать Сообщить модератору
 Re: Как сравнить две таблицы  [new]
SIMPLicity_
Member

Откуда: (((@)))
Сообщений: 8879
having count(*) < 2 в данном варианте по факту эквивалентно having count(*) = 1 - т.е. выбираются только те тройки a, b, c которые в таком порядке встречаются только один раз - либо в исходной таблице a либо в исходной таблице b. Порядок расстановки a, b и с имеет значение!
28 янв 12, 17:25    [11989259]     Ответить | Цитировать Сообщить модератору
 Re: Как сравнить две таблицы  [new]
Човайохоя
Guest
SIMPLicity_,

Порядок расстановки - что под этим имеется в виду, не могли бы написать другими словами ?
A, B, C или B, C, A - т.е., имеется в виду порядок перечисления полей, верно ?
28 янв 12, 17:31    [11989279]     Ответить | Цитировать Сообщить модератору
 Re: Как сравнить две таблицы  [new]
Човайохоя
Guest
видимо, да. Стало яснее, спасибо!
28 янв 12, 17:32    [11989284]     Ответить | Цитировать Сообщить модератору
 Re: Как сравнить две таблицы  [new]
Човайохоя
Guest
Остался главный вопрос - про колонку с указанием имени таблицы
Dr.Lightman
2KOLCHOZ_POSTEVENT
Отличная мысль!!!

Предположим что есть две идентичные по структуре таблицы A и B с атрибутами C,D,E.

select c, d, e
   from (
      select c,d,e from a
      union all
      select c,d,e from b) both
   group by c, d, e
   having count(*) < 2


Получим все уникальные (несимметричные) наборы атрибутов C,D,E, т.е. вставленные, удаленные, измененные... правда без указания на таблицу, что тоже не сложно.

Однако vova не полностью сформулировал свою задачу.
Поиск удалений из таблицы А с использованием бакапа В
select B.*
from B left join A on A.key = B.key
where A.key Is Null

Поиск вставок и изменений в таблице А с использованием бакапа В
select А.*
from А left join B on A.key = B.key and A.field1 = B.field1 and A.field2 = B.field2...
where b.key Is Null
... автор запроса пишет, что это не сложно (выделил красным). Не подскажите как ?
У самого изначально была мысль о колонке со значениями << / >> , т.е. указатели направления куда что требуется добавить, но имена таблиц (желательно полностью, включая имя БД) было бы гораздо лучше
28 янв 12, 17:40    [11989302]     Ответить | Цитировать Сообщить модератору
 Re: Как сравнить две таблицы  [new]
SIMPLicity_
Member

Откуда: (((@)))
Сообщений: 8879
Посмотрите вот это пример:
DECLARE @a table (c int, d int, e int)
DECLARE @b table (c int, d int, e int)
        
INSERT @a (c, d, e) SELECT 1,2,3 union SELECT 2,3,1 union SELECT 3,1,2 union  select 4,2,5  union  select 1,3,5  union  select 6,3,5
INSERT @b (c, d, e) SELECT 1,2,4 union SELECT 5,3,1 union SELECT 3,1,2 union  select 4,2,5  union  select 6,3,5

select * FROM @a
select * FROM @b

select c, d, e
   from (
      select c,d,e from @a
      union all
      select c,d,e from @b) both
   group by c, d, e
   having count(*) < 2


В результате:
c d e
1 2 3
1 2 4
1 3 5
2 3 1
5 3 1


в набор вошли комбинации (1,3,5) и (5,3,1). Одни и те же значения (единица, тройка и пятёрка), но в разных колонках.
28 янв 12, 17:49    [11989310]     Ответить | Цитировать Сообщить модератору
 Re: Как сравнить две таблицы  [new]
Човайохоя
Guest
Спасибо, всё понятно.

Вопрос закрыт, сообразил.
28 янв 12, 18:14    [11989373]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить