Подзапрос внутри скалярного подзапроса завершается с ошибкой ORA-00936 Missing Expression

  1. Это запрос, который не работает:

    SELECT distinct ord.DateOrdered
       , (SELECT docno 
          FROM th_mm_c_orderline_history 
          WHERE th_mm_c_orderline_history_id 
                in (SELECT max(th_mm_c_orderline_history_id) 
                    FROM th_mm_c_orderline_history 
                    GROUP BY c_orderline_id ) 
          order by docno,c_orderline_id) as docno 
    FROM c_order ord 
    INNER JOIN c_orderline on c_orderline.c_order_id = ord.c_order_id 
    INNER JOIN th_mm_c_orderline_history 
          on th_mm_c_orderline_history.c_order_id=ord.c_order_id
    

    Мне выдает ошибку ORA-00936 Missing expression

  2. Этот запрос работает нормально:

    SELECT docno 
    FROM th_mm_c_orderline_history 
    WHERE th_mm_c_orderline_history_id 
          in (SELECT max(th_mm_c_orderline_history_id) 
              FROM th_mm_c_orderline_history 
              GROUP BY c_orderline_id ) 
    order by docno,c_orderline_id as docno
    

person non srithong    schedule 29.05.2020    source источник
comment
Привет @nonsrithong, пожалуйста, покажи нам в виде текста запрос, который не работает?   -  person VBoka    schedule 29.05.2020
comment
Выберите отчетливый ord.dateordored, (выберите docno from th_mm_c_Orderline_c_Orderline_history_id in (select max (th_mm_c_orderline_history_id) из th_mmm_c_Orderline_history chordo, c_Orderline_id) Как docno из c_order ord Внутренний Присоединяйтесь к C_Orderline на C_ORDERLINE.C_ORDER_ID = th_mm_c_orderline_history на th_mm_c_orderline_history.c_order_id=ord.c_order_id   -  person non srithong    schedule 29.05.2020
comment
Пожалуйста, не размещайте код в виде изображений. См. здесь для более подробной информации, почему: meta.stackoverflow.com/questions/285551   -  person a_horse_with_no_name    schedule 29.05.2020


Ответы (2)


Просто удалите предложение order by из встроенного выбора. Вы не можете использовать предложение orde by там. Вы можете использовать его во внешнем выборе, если вам это нужно... Вот как вы можете сделать все три из них без ошибки:

SELECT distinct ord.DateOrdered
       , (SELECT docno FROM th_mm_c_orderline_history 
          WHERE th_mm_c_orderline_history_id 
                 in (SELECT max(th_mm_c_orderline_history_id) 
                     FROM th_mm_c_orderline_history 
                     GROUP BY c_orderline_id) 
          ) as docno 
FROM c_order ord 
INNER JOIN c_orderline on c_orderline.c_order_id = ord.c_order_id 
INNER JOIN th_mm_c_orderline_history on th_mm_c_orderline_history.c_order_id=ord.c_order_id
person VBoka    schedule 29.05.2020
comment
Привет @nonsrithong, надеюсь, мой ответ помог тебе. Пожалуйста, проверьте, что делать, если это помогло или правильно: stackoverflow.com/help/someone-answers - person VBoka; 29.05.2020

Вы можете использовать «порядок по оператору» в конце всего оператора выбора. Из-за того, что столбец C_ORDERLINE_ID не используется в операторе выбора, это может привести к ошибке в порядке за оператором. Попробуйте эту версию ниже.

 SELECT DISTINCT
       C_ORDER.DATEORDER,
       (SELECT DOCNO
          FROM TH_MM_C_ORDERLINE_HISTORY
         WHERE     C_ORDER_ID = C_ORDER_ID
               AND TH_MM_C_ORDERLINE_HISTORY_ID IN (  SELECT MAX (TH_MM_C_ORDERLINE_HISTORY_ID)
                                                        FROM TH_MM_C_ORDERLINE_HISTORY
                                                    GROUP BY C_ORDERLINE_ID)) AS DOCNO,
       C_ORDER.DOCUMENTNO
  FROM C_ORDER 
  INNER JOIN C_ORDERLINE ON C_ORDERLINE.C_ORDER_ID = C_ORDER_ID 
  ORDER BY DOCNO, C_ORDERLINE_ID;
person WolfStar    schedule 29.05.2020