Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Запрос по БД [D6, IB5.x]


n_sch ©   (2007-10-31 11:41:00) 

Добрый день! Есть две таблицы, одна с эталонными данными, другая с меняющимся числом записей обе проиндексированны по одному ключевому полю. Вопрос как из эталонной таблицы выбрать только те записи которых нет в таблице с меняющимся числом записей??? SQL запросы типа "<>" или NOT LIKE не помогают...Заранее спасибо!


Sergey13   (2007-10-31 15:53:00) [1]

> [7] Desdechado ©   (31.10.07 15:46)
Врать не буду, не наблюдал.
Я вообще EXISTS не особо "люблю" пользовать, поэтому простых попадалось мало.


Desdechado   (2007-10-31 15:46:00) [2]

> Sergey13 ©   (31.10.07 15:37) [6]
Оракл в случае не очень вычурных EXISTS преобразует.


Sergey13   (2007-10-31 15:37:00) [3]

> [5] DrPass ©   (31.10.07 15:17)

> "Правильный" оптимизатор распознает, что в данном случае
> можно выполнить объединение таблиц, и собственно сведет
> операцию к тому самому LEFT JOIN'у.

Сомнительно мне это, но проверять лень, да и не на чем.


DrPass   (2007-10-31 15:17:00) [4]


> Sergey13 ©   (31.10.07 14:24) [4]


> Это нормальное поведение для любого сервера, а не только
> интербейс

Ненормальное. "Правильный" оптимизатор распознает, что в данном случае можно выполнить объединение таблиц, и собственно сведет операцию к тому самому LEFT JOIN'у. А LEFT JOIN будет выполняться намного быстрее - проверь.


Sergey13   (2007-10-31 14:24:00) [5]

> [3] DrPass ©   (31.10.07 13:49)

> Она на каждую запись будет отдельный select делать.

Это нормальное поведение для любого сервера, а не только интербейс. Да, оператор достаточно затратный, не спорю. Но по первичному ключу вряд ли будут сильные тормоза. К тому же запрос скорее всего не часто выполняемый. Как вариант вполне приемлем. ИМХО.


DrPass   (2007-10-31 13:49:00) [6]


> Sergey13 ©   (31.10.07 11:44) [1]
> not exists попробуй

С Interbase так пробовать не надо. Она на каждую запись будет отдельный select делать. Только LEFT JOIN


Правильный_Вася   (2007-10-31 11:46:00) [7]

SELECT t1.* FROM t1 LEFT OUTER JOIN t2 ON t1.pk=t2.pk
WHERE t2.pk IS NULL


Sergey13   (2007-10-31 11:44:00) [8]

not exists попробуй


Наверх

Титульная страница Поиск, карта сайта Написать письмо