Подскажите, как выбрать записи из таблицы, которых нет во 2-
Подскажите, как выбрать записи из таблицы, которых нет во 2-
Подскажите, как выбрать записи из таблицы, которых нет во 2-ой таблице.
Т.е.:
Table1 с полями ID, Name
Table2 с полями ID2, ID
Нужно выбрать все записи таблицы Table1.ID, которых нет в Table2.ID
Т.е.:
Table1 с полями ID, Name
Table2 с полями ID2, ID
Нужно выбрать все записи таблицы Table1.ID, которых нет в Table2.ID
И зря. EXISTS в таких запросах работает лучше на любом объёме данных и при любых условиях.xvv писал(а):через exists, но я его не люблю.
Ситуация может измениться только при одном условии - если LEFT JOIN перестанет работать рекурсивным перебором.
Код: Выделить всё
select *
from table1 t1
where not exists (select * from table2 where id = t1.id)
Это интересно
И больее логично, на мой взгляд. Спасибо.
Как и на 2.0, и на 1.5, и на 1.0.xvv писал(а):Как ни странно, но в fb2.1 exist работает неплохо.
Хотелось бы поглядеть на пример, где exist будет медленнее чем left join, на любом из указанных серверов.
Хотя установленного 1.5 у меня нет, но для такого случая поставлю
ЗЫ: Left join я лично применяю для таких целей только в 1С. Эти лентяи до сих пор кореллирующие подзапросы не могут сделать...
Провел некоторое исследование по данному вопросу и предлагаю ознакомиться с результатами вот сдесь http://www.az-design.ru/Support/DataBas ... 0003.shtml
а чего сразу ID - bigint ? смущать неокрепшие умы?
да и вообще. "напугало неиспользование индексов".
A.ID NOT IN - здесь индекс никак
SELECT B.ID FROM B - здесь тоже индекс ни к селу ни к городу
попытка
SELECT B.ID FROM B ORDER BY B.ID - это вообще чума. order by по индексу идет по индексу и дергает записи чаще всего в "случайном" порядке с диска. Поэтому order by по индексу годится только для небольших выборок. А уж тем более здесь...
distinct - начиная с IB 6.0 также идет натуралом.
в общем, если оставить как есть, то я бы сопроводил комментариями.
да и вообще. "напугало неиспользование индексов".
A.ID NOT IN - здесь индекс никак
SELECT B.ID FROM B - здесь тоже индекс ни к селу ни к городу
попытка
SELECT B.ID FROM B ORDER BY B.ID - это вообще чума. order by по индексу идет по индексу и дергает записи чаще всего в "случайном" порядке с диска. Поэтому order by по индексу годится только для небольших выборок. А уж тем более здесь...
distinct - начиная с IB 6.0 также идет натуралом.
в общем, если оставить как есть, то я бы сопроводил комментариями.
Последний раз редактировалось kdv 03 июн 2008, 13:25, всего редактировалось 1 раз.