SQL表连接和子查询

时间:2014-04-01 01:09:05

标签: sql oracle join multiple-select

我需要将3张桌子加在一起,并从中获取日期,价格和客户ID。这是描述:

  

首先,您需要确定从2012年1月1日至今,购买“自行车配件”部门产品的客户ID。为此,您需要将订单加入到产品的订单行中。

     

然后在您的父查询中,您将订单连接到订单行并过滤子查询结果中的客户ID。要计算终身订单收入,您需要对价格*数量的结果执行汇总函数。

所以我有一个带有客户ID的客户表,一个带有订单号,价格和数量的订单表,一个带有客户ID,订单号和订单日期的订单表,以及一个带有分部的产品表(需要获得'自行车配件'检索)。我写了这个,我从“无效的标识符”到“缺少表达式”的错误取决于我的移动。

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”:无效标识符

帮助!

1 个答案:

答案 0 :(得分:0)

from子句的计算方式与读取它的方式相同。这意味着在on子句中可以提及表别名之前,需要将其定义为表。您在定义之前使用orderlines。因此错误。

这很容易解决:

from(select bc_orders。*,bc_orderlines。*,bc_products。*         来自bc_customers加入              bc_orders              在bc_orders.customer_number = bc_customers.customer_number加入              bc_orderlines              在bc_orders.order_number = bc_orderlines.order_number加入              bc_products              在bc_products.sku = bc_orderlines.sku        其中bc_orders.order_date> =' 01-JAN-2012'       )bc

一些注意事项:

  • 我还没有解决查询中的所有问题,只是您提出的问题。
  • 您不需要子查询。
  • 使用表别名,您的查询将更具可读性。我鼓励你使用它们。
  • 如上所述,子查询将有不明确的列。