SQL проблема многостоловых запросов с использованием Inner Join - PullRequest
1 голос
/ 26 апреля 2020

Я пытаюсь решить этот вопрос с помощью Inner Join, но продолжаю получать ошибки

Укажите номер клиента, номер заказа, дату заказа и общую сумму заказа для каждого заказа, общая сумма которого превышает 500 долларов США. Присвойте имя столбца ORDER_TOTAL столбцу, который отображает итоги заказа. Упорядочить результаты по номеру заказа.

ORDERS таблица имеет CUSTOMER_NUM, ORDER_NUM, а ORDER_DATE

ORDER_LINE имеет ORDER_NUM, ITEM_NUM, NUM_ORDERED и QOUT

Это мое решение:

SELECT CUSTOMER_NUM, ORDERS.ORDER_NUM, ORDER_DATE, SUM(QUOTED_PRICE) AS ORDER_TOTAL     
FROM ORDERS     
INNER JOIN ORDER_LINE ON ORDERS.ORDER_NUM = ORDER_LINE.ORDER_NUM    
GROUP BY ORDER_NUM     
HAVING ORDER_TOTAL > 500;

Я получаю ошибку:

Error starting at line : 61 in command -    
SELECT CUSTOMER_NUM, ORDERS.ORDER_NUM, ORDER_DATE, SUM(QUOTED_PRICE) AS ORDER_TOTAL     
FROM ORDERS     
INNER JOIN ORDER_LINE ON ORDERS.ORDER_NUM = ORDER_LINE.ORDER_NUM    
GROUP BY ORDER_NUM     
HAVING ORDER_TOTAL > 500

Error at Command Line : 65 Column : 8
Error report -

SQL Error: ORA-00904: "ORDER_TOTAL": invalid identifier    
00904. 00000 -  "%s: invalid identifier"

Любые предложения

1 Ответ

2 голосов
/ 26 апреля 2020

Oracle не позволяет повторно использовать псевдонимы, определенные в предложении SELECT в предложении GROUP BY. Вам нужно повторить выражение. Кроме того, все неагрегированные столбцы должны отображаться в предложении GROUP BY.

Итак:

SELECT o.CUSTOMER_NUM, o.ORDER_NUM, o.ORDER_DATE, SUM(ol.QUOTED_PRICE) AS ORDER_TOTAL
FROM ORDERS o
INNER JOIN ORDER_LINE ol ON ol.ORDER_NUM = o.ORDER_NUM
GROUP BY o.CUSTOMER_NUM, o.ORDER_NUM, o.ORDER_DATE
HAVING SUM(ol.QUOTED_PRICE) > 500;

Обратите внимание, что я изменил ваш запрос, чтобы использовать псевдонимы таблиц, и в каждом столбце был добавлен префикс стол, к которому он принадлежит; Это хорошая практика, которая облегчает чтение и запись запроса и позволяет избежать двусмысленности в отношении того, к какой таблице принадлежит каждый столбец.

...