Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Oracle Новый топик    Ответить
 in или не in  [new]
ZShurik
Member

Откуда: Minsk
Сообщений: 14
допустим есть 2 таблички. нужна выборка из первой по условию из второй.
что правильнее и в каких случаях
select * from t1 where t1.pk in (select fk from t2 where t2.f1 = 1)
или
select t1.* from t1, t2 where t1.pk = t2.fk and t2.f1 = 1
12 июн 09, 09:42    [7293275]     Ответить | Цитировать Сообщить модератору
 Re: in или не in  [new]
Elic
Member

Откуда:
Сообщений: 29980
ZShurik
что правильнее и в каких случаях
Если t2(fk,f1) неуникально, то будут разные результаты и правильный - первый.
12 июн 09, 09:50    [7293281]     Ответить | Цитировать Сообщить модератору
 Re: in или не in  [new]
SilverM
Member

Откуда:
Сообщений: 47
Если t2(fk,f1) неуникально то во втором варианте обязательно д.б. DISTINCT
select DISTINCT t1.* from t1, t2 where t1.pk = t2.fk and t2.f1 = 1
12 июн 09, 11:56    [7293525]     Ответить | Цитировать Сообщить модератору
 Re: in или не in  [new]
ZShurik
Member

Откуда: Minsk
Сообщений: 14
считаем что уникальны.
какой из вариантов более удачный с точки зрения производительности
12 июн 09, 12:23    [7293611]     Ответить | Цитировать Сообщить модератору
 Re: in или не in  [new]
Elic
Member

Откуда:
Сообщений: 29980
SilverM
Если t2(fk,f1) неуникально то во втором варианте обязательно д.б. DISTINCT
Результат-то это конечно выровняет, но это как бульдозером полировать оптику
12 июн 09, 12:28    [7293625]     Ответить | Цитировать Сообщить модератору
 Re: in или не in  [new]
Elic
Member

Откуда:
Сообщений: 29980
ZShurik
считаем что уникальны.

ZShurik
какой из вариантов более удачный с точки зрения производительности
А ты сам попробуй, сравни планы.
Мы ж о твоих данных знаем ровным счётом ничего
12 июн 09, 12:30    [7293630]     Ответить | Цитировать Сообщить модератору
 Re: in или не in  [new]
Кум
Member

Откуда:
Сообщений: 11
А если так

select * from t1,  (select distinct fk from t2 where t2.f1 = 1)  tmp where t1.pk = tmp.fk

что бы для каждой строки с t1 не выполнялся запрос
(select fk from t2 where t2.f1 = 1)
12 июн 09, 13:31    [7293812]     Ответить | Цитировать Сообщить модератору
Все форумы / Oracle Ответить