Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Не получается подзапрос / 8 сообщений из 8, страница 1 из 1
01.07.2016, 12:03:45
    #39266239
r00xus
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Не получается подзапрос
Здравствуйте коллеги.

Есть запрос с подзапросом:
Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
SELECT
  owner.owner_id,
  owner.owner_name,
  doc.doc_id,
  pos.pos_id,
  pos.date_create
FROM
  test_owner owner
  LEFT JOIN test_doc doc ON
    doc.owner_id = owner.owner_id
  LEFT JOIN test_pos pos ON
    pos.doc_id = doc.doc_id
WHERE
  pos.pos_id = 
  (
    SELECT
      pos_id
    FROM
      test_pos pos1
    WHERE
      pos1.doc_id = doc.doc_id AND
      ROWNUM = 1
    ORDER BY 
      pos1.date_create     
  )


Ругается ORA-00907: missing right parenthesis SQL.sql 23 5
Без ORDER BY в подзапросе все работает отлично. Но из таблицы TEST_POS нужно выбирать только одну запись на каждый документ, которая была создана самая первая по TEST_POS.DATE_CREATE.
Что не так? При чем тут не закрытая правая скобка?
...
Рейтинг: 0 / 0
01.07.2016, 12:10:24
    #39266253
orawish
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Не получается подзапрос
r00xus,

при том, что парсер не нашел задней скобки до ордербай кляузы (у него и спрашивайте).
переписать подзапрос несложно - аналитикой или агрегацией
...
Рейтинг: 0 / 0
01.07.2016, 12:58:48
    #39266308
Бельфя
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Не получается подзапрос
Оракл, если память меня не подводит, сначала нумерует строки, а потом выполняет order by.
Результат будет отличаться от требуемого?
...
Рейтинг: 0 / 0
01.07.2016, 13:39:24
    #39266349
Не получается подзапрос
Всем здравия!

Попробуйте-ка вот это:

Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
WITH pos1
     AS (  SELECT *
             FROM test_pos pos1
            WHERE pos1.doc_id = doc.doc_id AND ROWNUM = 1
         ORDER BY pos1.date_create)
SELECT owner.owner_id,
       owner.owner_name,
       doc.doc_id,
       pos.pos_id,
       pos.date_create
  FROM test_owner owner
       LEFT JOIN test_doc doc ON doc.owner_id = owner.owner_id
       LEFT JOIN test_pos pos ON pos.doc_id = doc.doc_id
 WHERE pos.pos_id = pos1.pos_id;
...
Рейтинг: 0 / 0
01.07.2016, 13:58:57
    #39266377
Egoр
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Не получается подзапрос
r00xus,

ORDER BY, имхо, в подзапросах, которые стоят в условии "=" недопустимы
потому как считается, что они возвращают только одну запись и сортировать тут нечего
...
Рейтинг: 0 / 0
01.07.2016, 14:03:13
    #39266385
Egoр
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Не получается подзапрос
БельфяОракл, если память меня не подводит, сначала нумерует строки, а потом выполняет order by.
Результат будет отличаться от требуемого?Правильно. Поэтому, если нет индекса на поля test_pos.doc_id+test_pos.date_create
или он есть, но его не включит оптимизатор, то результат запроса
Код: plsql
1.
2.
3.
4.
5.
SELECT pos_id
FROM test_pos pos1
WHERE pos1.doc_id = doc.doc_id
  AND ROWNUM = 1
ORDER BY pos1.date_create 

будет непредсказуем.
...
Рейтинг: 0 / 0
01.07.2016, 22:27:34
    #39266724
JaRo
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Не получается подзапрос
to автор: у вас кроме всего прочего явно непонятки с outer join. При накладывании условия в where весь ваш outer идёт лесом.
...
Рейтинг: 0 / 0
04.07.2016, 08:17:34
    #39267087
SQLap
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Не получается подзапрос
БельфяОракл, если память меня не подводит, сначала нумерует строки, а потом выполняет order by.
Результат будет отличаться от требуемого?
Плюсую. Тогда уж какой-нибудь max() keep (dense_rank last/first)
...
Рейтинг: 0 / 0
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Не получается подзапрос / 8 сообщений из 8, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]