2013-09-10 5 views
14

Я попытался найти ответ на свою проблему, но не смог получить ответ, который действительно помог. Я написал код sql, но не могу найти, где проблема. Можно ли поставить подзапрос в разделе «ОТ»?SQL join subquery

SELECT S2.ITEM, 
     S1.SHOP_ORDER, 
     S1.OPERATION_NO, 
     S1.START_DATE, 
     S1.QTY_GOODS, 
     S1.QTY_ENTERED, 
     S1.QTY_MRB 
FROM (SELECT SHOP_ORD_RPT.OPERATION_NO, 
       SHOP_ORD_RPT.SHOP_ORDER 
     FROM FLAME.SHOP_ORD_RPT 
     WHERE SHOP_ORD_RPT.OPERATION_NO = 110 
       OR SHOP_ORD_RPT.OPERATION_NO = 370) AS S1 
     JOIN (SELECT SHOP_ORD.SHOP_ORDER 
      FROM FLAME.SHOP_ORD 
      WHERE SHOP_ORD.ITEM = '3A2375' 
        OR SHOP_ORD.ITEM = '3A2703')AS S2 
     ON S1.SHOP_ORDER = S2.SHOP_ORDER; 

Ошибка я получаю при запуске скрипта:

команда SQL не правильно закончился

Я был бы признателен, если кто-то может помочь. Спасибо очень much- Рут

+4

Удалить «AS» в 'AS S1' и' AS S2'. возможно, дубликат [SQL Command не был закончен?] (http://stackoverflow.com/questions/9811711/sql-command-not-properly-ended) –

+0

Я считаю, что это оракул. Это одно из моих наименее любимых сообщений об ошибках. У вас есть синтаксическая ошибка где-то. Возможно, стоит добавить псевдонимы для столбцов shop_order в каждом подзапросе. В противном случае, начните заново и идите с помощью детских шагов, пока не найдете ошибку. –

+0

Здесь вам не нужны подзапросы - просто присоедините таблицы к самому основному запросу. –

ответ

25

Попробуйте удалить AS keywrod после FROM и JOIN подзапроса, как показано ниже

SELECT S2.ITEM, S1.SHOP_ORDER, S1.OPERATION_NO, S1.START_DATE,S1.QTY_GOODS, S1.QTY_ENTERED, S1.QTY_MRB 
FROM (
    SELECT SHOP_ORD_RPT.OPERATION_NO, SHOP_ORD_RPT.SHOP_ORDER 
    FROM FLAME.SHOP_ORD_RPT 
    WHERE SHOP_ORD_RPT.OPERATION_NO =110 
    OR SHOP_ORD_RPT.OPERATION_NO =370 
    ) S1 
JOIN (
    SELECT SHOP_ORD.SHOP_ORDER 
    FROM FLAME.SHOP_ORD 
    WHERE SHOP_ORD.ITEM ='3A2375' 
    OR SHOP_ORD.ITEM ='3A2703' 
    ) S2 
ON S1.SHOP_ORDER = S2.SHOP_ORDER; 
9

можно поставить подзапрос в пределах от пункта. Попробуйте следующее:

SELECT S2.ITEM, 
     S1.SHOP_ORDER, 
     S1.OPERATION_NO, 
     S1.START_DATE, 
     S1.QTY_GOODS, 
     S1.QTY_ENTERED, 
     S1.QTY_MRB 
FROM (SELECT SHOP_ORD_RPT.OPERATION_NO, 
       SHOP_ORD_RPT.SHOP_ORDER 
     FROM FLAME.SHOP_ORD_RPT 
     WHERE SHOP_ORD_RPT.OPERATION_NO = 110 
       OR SHOP_ORD_RPT.OPERATION_NO = 370) S1, 
     (SELECT SHOP_ORD.SHOP_ORDER 
     FROM FLAME.SHOP_ORD 
     WHERE SHOP_ORD.ITEM = '3A2375' 
       OR SHOP_ORD.ITEM = '3A2703') S2 
WHERE S1.SHOP_ORDER = S2.SHOP_ORDER;