SQL表联接和子查询
我需要将3个表连接在一起,并从中获取日期、价格和客户ID。以下是描述: 首先,您需要了解从2012年1月1日至今购买“自行车配件”部门产品的任何人的客户id。要实现这一点,您需要将订单、订单行和产品连接起来 然后,在父查询中,您将订单连接到订单行,并根据子查询结果中的客户id进行筛选。要计算终身订单收入,您需要对价格*数量的结果执行聚合函数 因此,我有一个带有客户id的customers表,一个带有订单号、价格和数量的orderlines表,一个带有客户id、订单号和订单日期的orders表,以及一个带有部门的products表,这些部门需要检索“自行车配件”。我已经写了这篇文章,根据我所做的工作,从无效的标识符到缺少的表达式,都会出现错误SQL表联接和子查询,sql,oracle,join,multiple-select,Sql,Oracle,Join,Multiple Select,我需要将3个表连接在一起,并从中获取日期、价格和客户ID。以下是描述: 首先,您需要了解从2012年1月1日至今购买“自行车配件”部门产品的任何人的客户id。要实现这一点,您需要将订单、订单行和产品连接起来 然后,在父查询中,您将订单连接到订单行,并根据子查询结果中的客户id进行筛选。要计算终身订单收入,您需要对价格*数量的结果执行聚合函数 因此,我有一个带有客户id的customers表,一个带有订单号、价格和数量的orderlines表,一个带有客户id、订单号和订单日期的orders表,以
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\U订单行。订单号:无效标识符
救命啊 from子句的求值方式与您读取它的方式相同。这意味着在on子句中提及表别名之前,需要将其定义为表。在定义订单行之前,您正在使用订单行。因此出现了错误
这很容易解决:
从中选择bc_订单。*、bc_订单行。*、bc_产品。*
来自卑诗省的客户加入
卑诗省命令
在bc_订单上。客户_编号=bc_客户。客户_编号加入
bc_订单行
在bc_orders.order_number=bc_orderlines.order_number连接上
bc_产品
在bc_products.sku=bc_orderlines.sku上
其中bc_orders.order_date>=“2012年1月1日”
卑诗省
一些注意事项:
我没有解决查询中的所有问题,只是解决了您询问的问题。
您不需要子查询。
如果使用表别名,查询的可读性会更好。我鼓励你使用它们。
编写的子查询将具有不明确的列。