Выборка из табл исключая данные др табл
Выборка из табл исключая данные др табл
Помогите с запросом...
Выбрать из 1 таблицы данные только те, которых нет во 2 табл.
первая табл user (id, name)
вторая табл adress (id, id_user, adr)
Как вынуть id user-ов, которых нет во второй табл?
Выбрать из 1 таблицы данные только те, которых нет во 2 табл.
первая табл user (id, name)
вторая табл adress (id, id_user, adr)
Как вынуть id user-ов, которых нет во второй табл?
-
- Сообщения: 250
- Зарегистрирован: 25 июл 2007, 21:33
Re: Выборка из табл исключая данные др табл
Чет не понял. А в чём проблема?Sparton писал(а):Помогите с запросом...
Выбрать из 1 таблицы данные только те, которых нет во 2 табл.
первая табл user (id, name)
вторая табл adress (id, id_user, adr)
Как вынуть id user-ов, которых нет во второй табл?
Код: Выделить всё
select * from Table1
where not id in
(select id from Table2)
Где всех учат плохому, "in (select)", "not in (select)"... 
Есть хорошая штука exists, типа

Есть хорошая штука exists, типа
Код: Выделить всё
select * from Table1
where not exists (select id from Table2 where Table1.id = id)
-
- Сообщения: 250
- Зарегистрирован: 25 июл 2007, 21:33
Хм... Согласен что можно сделать и так. А в чём различие? Все равно ведь подзапрос выполняется сначала, а потом вхождения ищутся? Есть принципиальные отличия кроме синтаксиса?WildSery писал(а):Где всех учат плохому, "in (select)", "not in (select)"...
Есть хорошая штука exists, типаКод: Выделить всё
select * from Table1 where not exists (select id from Table2 where Table1.id = id)
Это классика для систем, не поддерживающих подзапросы, например 1С.Heimdallr писал(а):А так разве не классика жанра:
Практически одинаково, но скорость exist >= скорости left join.Heimdallr писал(а):Или подзапрос с exists все-таки лучше?
Как правило, равны, но бывают исключения.
У меня была ещё ситуация наоборот, когда left быстрее отрабатывал, но сейчас я её не помню, и потому склонен к мнению, что это у меня был глюк или неправильно что-то сравнивал.