繁体   English   中英

SQL表联接和子查询

[英]SQL table joins and subqueries

我需要将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”:无效的标识符

救命!

from子句的评估方式与您读取它的方式相同。 这意味着在on子句中提及表别名之前,需要将其定义为表。 您正在使用orderlines然后再对其进行定义。 因此,错误。

这很容易解决:

from(从bc_customers中选择bc_orders。*,bc_orderlines。*,bc_products。*。) > ='2012年1月1日')

一些注意事项:

  • 我还没有解决查询中的所有问题,仅解决了您所问的问题。
  • 您不需要子查询。
  • 使用表别名,您的查询将更具可读性。 我鼓励您使用它们。
  • 如所写,子查询将具有歧义的列。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM