powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Не получается подзапрос
8 сообщений из 8, страница 1 из 1
Не получается подзапрос
    #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
Не получается подзапрос
    #39266253
Фотография orawish
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
r00xus,

при том, что парсер не нашел задней скобки до ордербай кляузы (у него и спрашивайте).
переписать подзапрос несложно - аналитикой или агрегацией
...
Рейтинг: 0 / 0
Не получается подзапрос
    #39266308
Бельфя
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Оракл, если память меня не подводит, сначала нумерует строки, а потом выполняет order by.
Результат будет отличаться от требуемого?
...
Рейтинг: 0 / 0
Не получается подзапрос
    #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
Не получается подзапрос
    #39266377
Фотография Egoр
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
r00xus,

ORDER BY, имхо, в подзапросах, которые стоят в условии "=" недопустимы
потому как считается, что они возвращают только одну запись и сортировать тут нечего
...
Рейтинг: 0 / 0
Не получается подзапрос
    #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
Не получается подзапрос
    #39266724
Фотография JaRo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
to автор: у вас кроме всего прочего явно непонятки с outer join. При накладывании условия в where весь ваш outer идёт лесом.
...
Рейтинг: 0 / 0
Не получается подзапрос
    #39267087
SQLap
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
БельфяОракл, если память меня не подводит, сначала нумерует строки, а потом выполняет order by.
Результат будет отличаться от требуемого?
Плюсую. Тогда уж какой-нибудь max() keep (dense_rank last/first)
...
Рейтинг: 0 / 0
8 сообщений из 8, страница 1 из 1
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Не получается подзапрос
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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