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

Откуда:
Сообщений: 325
select ...,
(select count(*) from t2
where t2.i=2 and t2.flag=0
and t2.f1=t.f1
and t2.f2=t.f2) x
from t

where
(select count(*) from t2
where t2.i=2 and t2.flag=0
and t2.f1=t.f1
and t2.f2=t.f2) = 0
or ...

Как бы сделать так, чтобы подзапрос в скобках не считался два раза?
7 янв 05, 08:53    [1229904]     Ответить | Цитировать Сообщить модератору
 Re: Подзапрос  [new]
Taffy
Member

Откуда:
Сообщений: 20501
 select ...,
 x = 0
from t

where
(select count(*) from t2
where t2.i=2 and t2.flag=0
and t2.f1=t.f1
and t2.f2=t.f2) = 0
or ...
 
7 янв 05, 09:03    [1229909]     Ответить | Цитировать Сообщить модератору
 Re: Подзапрос  [new]
YuriAM
Member

Откуда:
Сообщений: 829
Лучше использовать временную таблицу.
7 янв 05, 09:03    [1229910]     Ответить | Цитировать Сообщить модератору
 Re: Подзапрос  [new]
aleks2
Guest
А кто сказал, что оптимизатор идиот?
Оно и не будет считать дважды.
7 янв 05, 09:42    [1229919]     Ответить | Цитировать Сообщить модератору
 Re: Подзапрос  [new]
Glory
Member

Откуда:
Сообщений: 104760
select ...,
from t1
left outer join 
    (select t2.f1, t2.f2, count(*) as cnt 
     from t2
     where t2.i=2 and t2.flag=0
     group by t2.f1, t2.f2
    ) t2 on t2.f1=t.f1 and t2.f2=t.f2
7 янв 05, 10:11    [1229937]     Ответить | Цитировать Сообщить модератору
 Re: Подзапрос  [new]
sraider
Member

Откуда:
Сообщений: 325
aleks2
А кто сказал, что оптимизатор идиот?
Оно и не будет считать дважды.


План выполнения говорит обратное
7 янв 05, 17:31    [1230431]     Ответить | Цитировать Сообщить модератору
 Re: Подзапрос  [new]
sraider
Member

Откуда:
Сообщений: 325
Glory: ОНО! Спасибо!
7 янв 05, 18:08    [1230457]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить