Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Web программирование > SQL, базы данных
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 07.11.2010, 13:09   #1
Ma4balaka
Пользователь
 
Регистрация: 09.03.2010
Сообщений: 47
По умолчанию Отличающиеся данные из двух таблиц

Добрый день! Есть две таблицы одинаковые по структуре.
Нужно сделать выборку тех записей, которые отличаются. (Нужно проверить на сходство все поля таблицы а не только по ID).

Кто знает решение данной проблемы, откликнитесь!
Ma4balaka вне форума Ответить с цитированием
Старый 07.11.2010, 13:43   #2
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

не буду утверждать, что это то, что Вам нужно, но, можете попробовать. Как вариант...

Код:
select * from Table1
 where not exists (select * from Table2 where Table2.ПолеA=Table1.ПолеA and Table2.ПолеB=Table1.ПолеB and .... Table2.ПолеX=Table1.ПолеX)
union select * from Table2
 where not exists (select * from Table1 where Table2.ПолеA=Table1.ПолеA and Table2.ПолеB=Table1.ПолеB and .... Table2.ПолеX=Table1.ПолеX)
и на будущее указывайте свою СУБД...
Serge_Bliznykov вне форума Ответить с цитированием
Старый 08.11.2010, 13:00   #3
Ma4balaka
Пользователь
 
Регистрация: 09.03.2010
Сообщений: 47
По умолчанию

А нет возможности сравнить сразу строки (как это делает DISTINCT)?
Типа:
Код:
select * from Table1
 where not exists (select * from Table2 where Table2.*=Table1.*)
union select * from Table2
 where not exists (select * from Table1 where Table2.*=Table1.*)
В таблицах достаточно много записей

Последний раз редактировалось Ma4balaka; 08.11.2010 в 13:01. Причина: Уточнение
Ma4balaka вне форума Ответить с цитированием
Старый 08.11.2010, 14:11   #4
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

Цитата:
В таблицах достаточно много записей
а при чём здесь количество записей?!
Вам нужно указать, какое поле таблицы1 сравнивать с полем таблицы2
т.е. нужно перечислить все поля!


А вообще, я не знаю, для чего это Вам нужно, и что Вы с этим дальше делать будете. Задача синхронизации предполагает наличие механизма синхронизации.
в противном случае берём таблицу1, меняем любое поле. Всё. после синхронизации с таблицей2, где была такая же запись, она и останется. т.е. после синхронизации будет ДВЕ записи (одна как была до изменения, вторая - как стало после изменения...) впрочем, Вы же, наверное, знаете, что делаете!


Цитата:
возможности сравнить сразу строки (как это делает DISTINCT)
погодите-ка! А результат работы команды DISTINCT Вас устраивает?
Так тогда нет ничего проще!
Код:
select DISTINCT all_rec.* from
  (select * from Таблица1
   union all
   select * from Таблица2) all_rec

Последний раз редактировалось Serge_Bliznykov; 08.11.2010 в 14:14.
Serge_Bliznykov вне форума Ответить с цитированием
Старый 08.11.2010, 15:41   #5
Ma4balaka
Пользователь
 
Регистрация: 09.03.2010
Сообщений: 47
По умолчанию

Не совсем то, мне как раз нужны те записи, которые откинул оператор DISTINCT
Ma4balaka вне форума Ответить с цитированием
Старый 08.11.2010, 15:57   #6
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

так а чем первый вариант не устраивает?
Serge_Bliznykov вне форума Ответить с цитированием
Старый 08.11.2010, 16:01   #7
Ma4balaka
Пользователь
 
Регистрация: 09.03.2010
Сообщений: 47
По умолчанию

Итоговая таблица получается пустой

Внесу некоторую ясность, а то я и сам запутался. У меня есть две таблицы, сформированные следующим кодом. Для первой таблицы:
Код:
data2.Razn_3.SQL.Add('SELECT DISTINCT EEMain.*,EEKomplect.* FROM EEmain, EEKomplect WHERE EEKomplect.id_main= EEMain.id');
data2.Razn_3.SQL.Add('AND EEKomplect.status='+#39+'Регулярные'+#39);
То же самое для второй (таблицы MMain, MMKomplect).
Мне нужно найти строки, которые отличаются. Отличаться могут любые поля.

Последний раз редактировалось Stilet; 09.11.2010 в 13:44.
Ma4balaka вне форума Ответить с цитированием
Старый 08.11.2010, 16:27   #8
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

Цитата:
Итоговая таблица получается пустой
значит нет записей, с отличающимися полями.


СУБД какая?
без Ваших тестовых данных я Вам ничего более конкретного сказать не могу...
Если имеется возможность - создайте и заполните (чем угодно) тестовые БД (несколько записей будет достаточно).
запакуйте и архив выкладывайте на форум.
будет о чём предметно поговорить...
Serge_Bliznykov вне форума Ответить с цитированием
Старый 09.11.2010, 13:18   #9
Ma4balaka
Пользователь
 
Регистрация: 09.03.2010
Сообщений: 47
По умолчанию

База данных - Access. Во вложении пример программы. Нужно чтобы в третье окно попали отличающиеся значения из второй таблицы.
Программа написана с использованием компонентов DAO.
Вложения
Тип файла: rar DEMO.rar (316.3 Кб, 39 просмотров)
Ma4balaka вне форума Ответить с цитированием
Старый 09.11.2010, 14:16   #10
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

я же Вам сразу дал рабочий запрос!!
единственное, у Вас оказались ещё поля с NULL
для них надо использовать функцию IIF

пробуйте такой запрос:
Код:
SELECT *
FROM Запрос2
WHERE not exists (select * from Запрос1 where 
  Запрос1.komplekt.id=Запрос2.komplekt_2.id
  and   Запрос1.komp=Запрос2.komp
  and   Запрос1.rang=Запрос2.rang
  and   Запрос1.id_main=Запрос2.id_main
  and   Запрос1.id_komplect=Запрос2.id_komplect 
  and   Запрос1.main.id=Запрос2.main_2.id
  and   trim(IIF(Запрос1.naim is null,'-',Запрос1.naim))=trim(IIF(Запрос2.naim is null,'-',Запрос2.naim))
  and   trim(IIF(Запрос1.naim2 is null,'-',Запрос1.naim2))=trim(IIF(Запрос2.naim2 is null,'-',Запрос2.naim2))
);
разумеется, надо ещё дописать сравнение полей:
adres, inn, kpp, okopf, rs, bank, ls, gde, ks, bik, history, nomer

Последний раз редактировалось Serge_Bliznykov; 09.11.2010 в 14:19.
Serge_Bliznykov вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Объединение двух таблиц go2net Microsoft Office Excel 4 12.08.2010 00:11
как выбрать несовпадающие данные из двух таблиц Tatu Microsoft Office Access 2 16.03.2010 20:41
соединение двух столбцов, имеющих схожие данные из разных таблиц kate158 SQL, базы данных 3 11.09.2009 10:08
Связать данные двух таблиц ZhK Microsoft Office Excel 5 03.09.2009 12:23
Помогите связать данные двух таблиц ZhK Microsoft Office Excel 47 27.08.2009 13:22