Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Oracle Новый топик    Ответить
 исправить подзапрос  [new]
zetzetzet
Guest
select 
t1.id,
t1.name, 
  (select pr.name
          from
            sprav pr,
            dog cp
          where
            t1.id=cp.t_id
            AND cp.date_end is null 
            AND pr.t=cp.collection_id
  ) sprav_name
FROM
table1 t1;
подзапрос выдает больше одной записи,
как его переписать, чтоб выдавалась одна запись по дополнительному условию: если записей больше одной, то выбрать с минимальной датой в cp.date_begin

плиз)
15 сен 11, 10:05    [11279191]     Ответить | Цитировать Сообщить модератору
 Re: исправить подзапрос  [new]
SQLap
Member [заблокирован]

Откуда:
Сообщений: 34063
zetzetzet,

перенести подзапрос по FROM, вестимо

ЗЫ и хто вас науськивает его в список полей толкать...
15 сен 11, 10:09    [11279212]     Ответить | Цитировать Сообщить модератору
 Re: исправить подзапрос  [new]
MazoHist
Guest
RTFM FIRST/LAST
15 сен 11, 10:09    [11279216]     Ответить | Цитировать Сообщить модератору
 Re: исправить подзапрос  [new]
zetzetzet
Guest
SQLap,
главный специалист науськивает,
запрос тяжелый, в 60% null выдает, объединять с + значить не использовать индексы - это агрументы)
15 сен 11, 10:15    [11279251]     Ответить | Цитировать Сообщить модератору
 Re: исправить подзапрос  [new]
grey_narn
Member

Откуда: Алма-Ата, Казахстан
Сообщений: 178
zetzetzet
select 
t1.id,
t1.name, 
  (select max(pr.name) keep (dense_rank first order by cp.date_start)
          from
            sprav pr,
            dog cp
          where
            t1.id=cp.t_id
            AND cp.date_end is null 
            AND pr.t=cp.collection_id
  ) sprav_name
FROM
table1 t1;
подзапрос выдает больше одной записи,
как его переписать, чтоб выдавалась одна запись по дополнительному условию: если записей больше одной, то выбрать с минимальной датой в cp.date_begin

плиз)
15 сен 11, 10:16    [11279274]     Ответить | Цитировать Сообщить модератору
 Re: исправить подзапрос  [new]
grey_narn
Member

Откуда: Алма-Ата, Казахстан
Сообщений: 178
zetzetzet
SQLap,
главный специалист науськивает,
запрос тяжелый, в 60% null выдает, объединять с + значить не использовать индексы - это агрументы)


А когда это Оракл разучился использовать индексы для внешних соединений? Я бы тоже все-таки без подзапроса предпочел обойтись.
15 сен 11, 10:19    [11279290]     Ответить | Цитировать Сообщить модератору
 Re: исправить подзапрос  [new]
zetzetzet
Guest
спасибо большое, пока так напишу, приедет босс, спрошу про внешние, и сама почитаю
15 сен 11, 10:24    [11279322]     Ответить | Цитировать Сообщить модератору
 Re: исправить подзапрос  [new]
zhal
Member

Откуда: Киев-Харьков
Сообщений: 647
zetzetzet,

B все-таки рекомендую сравнить планы выполнения с вариантом переноса во FROM
select t1.id, t1.name, p.sprav_name
  from table1 t1
      ,(select cp.t_id, max(pr.name) keep (dense_rank first order by cp.date_begin) sprav_name
          from sprav pr, dog cp
         where pr.t = cp.collection_id and cp.date_end is null
         group by cp.t_id) p
 where t1.id = p.t_id(+);
15 сен 11, 11:02    [11279590]     Ответить | Цитировать Сообщить модератору
Все форумы / Oracle Ответить