Как передать параметр из запроса в подзапрос?ORA-00904 - PullRequest
0 голосов
/ 20 октября 2018

Я получаю ошибку недопустимого идентификатора ORA-00904, из этого запроса

SELECT 
    tab1."col1" AS ID, 
    tab1."col4" AS Name,
    tab1."col5" AS Place,
    (SELECT SUBSTR (SYS_CONNECT_BY_PATH (one_row , ';'), 2) myConString
          FROM (SELECT tab2."col3" || ',' || tab2."col4" AS one_row, 
                       ROW_NUMBER () OVER(ORDER BY tab2."col1") rn, 
                       COUNT (*) OVER () cnt 
                FROM dbo."table2" tab2 
                WHERE tab2."col1" = tab1."col1" 
                AND tab2."col2" = tab1."col2") 
    WHERE rn = cnt 
    START WITH rn = 1
    CONNECT BY rn = PRIOR rn + 1) 
FROM dbo."table1" tab1  
WHERE tab1."col1" IN (1,2,3) 
AND tab1."col2" = 1 AND tab1."col3" = 1;

в этом конкретном месте

tab2."col1" = tab1."col1" AND tab2."col2" = tab1."col2"

В подзапросе я объединяю строки в строку, и она прекрасно работает идать мне правильные результаты, что-то вроде

1,100;1,200;2,150....

Я думаю, проблема в том, что я пытаюсь ссылаться на объекты более чем на один уровень подзапроса, но я не могу понять, как переписать запрос.

Спасибо за любую помощь

1 Ответ

0 голосов
/ 21 октября 2018

Коррелированные подзапросы могут ссылаться только на вещи на один уровень глубины .Ваша таблица tab1 находится на двух уровнях от вашей таблицы tab2.

Я не могу полностью обернуть голову вокруг вашего запроса, но вы можете переписать его так, чтобы у вас было соединение между tab1 и tab2 вместо того, чтобы иметь коррелированный запрос в предложении select?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...