Модераторы: LSD
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Сравнение таблиц 
:(
    Опции темы
Ruselus
Дата 11.10.2005, 13:18 (ссылка)    |    (голосов: 0) Загрузка ... Загрузка ... Быстрая цитата Цитата


Unregistered











Народ, помогите с простым скриптиком плиз.

Задача. Есть 2 таблицы с абсолютно одинаковой структурой.
Надо их сравнить и вывести только различии в каждой из них.

Простейши пример с одним столбцом (id)

select table1.id
from table1
where table1.id not in (select table2.id from table2)

Но у меня почему-то не работает, видимо не понял принципа.


В идеале нужно сравнивать в таблице кучу столбцов, таблицы связаны по полу ID.


Заранее фенкс.
  Вверх
kobra
Дата 11.10.2005, 13:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 730
Регистрация: 15.6.2005
Где: Грузия, Тбилиси

Репутация: нет
Всего: 9



запрос правилныи.
что там не работает?
PM MAIL   Вверх
sergejzr
Дата 11.10.2005, 14:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Un salsero
Group Icon


Профиль
Группа: Админ
Сообщений: 13285
Регистрация: 10.2.2004
Где: Германия г .Ганновер

Репутация: 3
Всего: 360



Какая база данных? В мускуле например вложенных селектов нет.




--------------------
PM WWW IM ICQ Skype GTalk Jabber AOL YIM MSN   Вверх
chief39
Дата 12.10.2005, 09:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


карманная тигра
***


Профиль
Группа: Участник Клуба
Сообщений: 1631
Регистрация: 20.5.2005
Где: Киев

Репутация: 8
Всего: 77



Тэкс... есть две таблицы с абсолютно идентичным набором столбцов.
Один из столбцов в каждой таблице - айдишка.
Нам надо получить строки, которые есть в table1 но нет в table2(идентичными считать строки с одинаковыми айдишками или с абсолютно идентичными значениями всец столбцов?)?
Или получить строки, которые с равными айдишками но разными значениями в остальных столбцах?

Хотя... если судить по твоему скрипту...

Принцип ты понял smile

Интересно узначь что такое "не работает".

Может просто оно различий не нашло - поэтому ничего и не вывело?

Или ругнулось при компиляции запроса?
И если да - что сказало?


--------------------
Люди - это свечи. Они либо горят, либо их - в жопу!(с)

PM MAIL   Вверх
Ruselus
Дата 12.10.2005, 16:25 (ссылка)    |    (голосов: 0) Загрузка ... Загрузка ... Быстрая цитата Цитата


Unregistered











Сорри, был не прав. Все работает, но почему-то ОЧЕНЬ долго.
Т.е. 2 массива примерно по 50 000 строк я сравнивал примерно час на сервере с 4-мя Ксеонами по 3,2GHz и 4Gb памяти. Вобщем так и не дождался... =((

Потом сделал немного по другому:
Код
SELECT table2.ID
FROM table2 LEFT JOIN table1 ON table2.ID = table1.ID
WHERE table1.ID Is Null;

Вот это дело просто летает. Т.е. обрабатывает массив на обычной машине (П4 2,8) примерна за пару секунд.
З.Ы. Это все делалось в Аксесе 2002. М.б. его косяк?


Вобщем с отсутствующими строками разобрался.
Вот еще вопросик.
Теперь мне надо эти строки проверить на идентичность. Пока делаю так:
Код

select table1.id, table1.InvNumber, table2.InvNumber, table1.Name, table2.Name, table1.BalanceCost, table2.BalanceCost
from table1, table2
where table1.id=table2.id and table1.InvNumber<> table2.InvNumber or table1.Name<>table2.Name or table1.BalanceCost<>table2.BalanceCost

Все работает, причем довольно быстро, не жалуюсь, но грядут таблицы с огромным кол-вом столбцов...
И где-то раньше я встречал описание процесса сравнивания строк целиком.
Т.е. там в строке то ли все значения объединяется перед сравнением, толи хеш какой-то вычисляется их строки. В общем что-то такое, но как называется не помню.
Не подскажете как это делается или хотя бы по каким ключевым словам искать?
  Вверх
Ser9a
Дата 13.11.2005, 16:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 70
Регистрация: 7.3.2005

Репутация: нет
Всего: нет



если к аксессу конектился с дельфей то тормозить будет жутко
smile
PM MAIL ICQ   Вверх
Akina
Дата 13.11.2005, 18:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Советчик
****


Профиль
Группа: Модератор
Сообщений: 20581
Регистрация: 8.4.2004
Где: Зеленоград

Репутация: 13
Всего: 454



Цитата(Ruselus @ 12.10.2005, 17:25)
Это все делалось в Аксесе 2002. М.б. его косяк?

Да. Вернее MS Jet. Оптимизация у него ни к черту, он не способен ни понять независимость вложенного запроса, ни закэшировать его.
Цитата(Ruselus @ 12.10.2005, 17:25)
Теперь мне надо эти строки проверить на идентичность. Пока делаю так

во тебе не лениво... просто свяжи их по ВСЕМ полям - в отбор попадут только полностью идентичные.


--------------------
 О(б)суждение моих действий - в соответствующей теме, пожалуйста. Или в РМ. И высшая инстанция - Администрация форума.

PM MAIL WWW ICQ Jabber   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Общие вопросы по базам данных"
LSD
Zloxa

Данный форум предназначен для обсуждения вопросов о базах данных не попадающих под тематику других форумов:

  • вопросам по СУБД для которых нет отдельных подфорумов
  • вопросам которые затрагивают несколько разных СУБД (например проблема выбора)
  • инструменты для работы с СУБД
  • вопросы проектирования БД
  • теоретически вопросы о СУБД

Данный форум не предназначен для:

  • вопросов о поиске разлиных БД (если не понимаете чем БД отличается от СУБД то: а) вам не сюда; б) Google в помощь)
  • обсуждения проблем с доступом к СУБД из различных ЯП (для этого есть соответсвующие форумы по каждому ЯП)
  • обсуждения проблем с написание SQL запросов, для этого есть форум Составление SQL-запросов
  • просьб о написании курсовой, реферата и т.п., для этого есть Центр помощи или фриланс биржа
  • объявлений о найме специалистов, для этого есть раздел Объявления о найме специалистов

Если вы не соблюдаете эти правила, не удивляйтесь потом не найдя свою тему/сообщение. ;)


Полезные советы:

При написании сообщения постарайтесь дать теме максимально понятное название. В теме максимально подробно опишите проблему. Если применимо укажите: название базы данных и версии (MySQL 4.1, MS SQL Server 2000 и т.п.); используемых язык программирования; способа доступа (ADO, BDE и т.д.); сообщения об ошибках.

Для вставки кода используйте теги [code=sql] [/code].

Литературу по базам данных можно поискать здесь.

Действия модераторов можно обсудить здесь.


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, LSD, Zloxa.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | СУБД, общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0596 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.