Соединения таблиц и подзапросы SQL

Мне нужно объединить 3 таблицы вместе и получить от них даты, цены, идентификаторы клиентов. Вот описание:

Сначала вам нужно выяснить идентификаторы клиентов, которые приобрели продукт в подразделении «Велосипедные аксессуары» с 1 января 2012 г. по настоящее время. Для этого вам нужно будет присоединить заказы к строкам заказов к продуктам.

Затем в родительском запросе вы объедините заказы со строками заказов и отфильтруете идентификаторы клиентов, которые указаны в результатах вашего подзапроса. Чтобы рассчитать доход от заказа за весь срок, вам нужно выполнить агрегированную функцию на основе результата цена * количество.

Итак, у меня есть таблица клиентов с идентификатором клиента, таблица строк заказов с номером заказа, ценой и количеством, таблица заказов с идентификатором клиента, номером заказа и датой заказа, а также таблица продуктов с разделением (необходима для получения `` Велосипедных аксессуаров '' извлечено). Я написал это и получаю ошибки от недопустимого идентификатора до отсутствующих выражений в зависимости от того, что я перемещаю.

select bc_orders.order_number, bc_orderlines.price, bc_orderlines.quantity, bc_orderlines.quantity*bc_orderlines.price AS "Total Revenue"
  from (select bc_orders.*, bc_orderlines.*, bc_products.* 
  from bc_customers
   join bc_orders
    on bc_orders.order_number = bc_orderlines.order_number
   join bc_products
    on bc_products.sku = bc_orderlines.sku

where bc_orders.order_date >= '01-JAN-2012')

inner join bc_orderlines 
  on bc_orders.order_number = bc_orderlines.order_number

И я возвращаюсь:

Ошибка в командной строке: 5 Столбец: 31
Отчет об ошибке:
Ошибка SQL: ORA-00904: BC_ORDERLINES.ORDER_NUMBER: недопустимый идентификатор

Помощь!


person falkon114    schedule 01.04.2014    source источник


Ответы (1)


Предложение from оценивается так же, как вы его читаете. Это означает, что прежде чем псевдоним таблицы можно будет упомянуть в предложении on, он должен быть определен как таблица. Вы используете orderlines до его определения. Отсюда и ошибка.

Это легко исправить:

from (выберите bc_orders. *, bc_orderlines. *, bc_products. * от bc_customers присоединиться к bc_orders на bc_orders.customer_number = bc_customers.customer_number bc_orderlines на bc_or joinders.order_number = bc_orderlines.order_number = bc_orderlines.order_number = bc_product_products.order_number = bc_orderlines.order_number = bc_orderlines.bc_orderlines.order_number = bc_orderlines.bc_orderlines.com > = '01 -JAN-2012 ') до н.э.

Некоторые примечания:

  • Я не устранил все проблемы в запросе, только ту, о которой вы спрашивали.
  • Подзапрос вам не нужен.
  • Ваш запрос будет намного удобнее читать с псевдонимами таблиц. Я призываю вас использовать их.
  • В подзапросе, как написано, будут неоднозначные столбцы.
person Gordon Linoff    schedule 01.04.2014