![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Запрос по БД [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 попробуй