Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/oracle/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
SQL表联接和子查询_Sql_Oracle_Join_Multiple Select - Fatal编程技术网

SQL表联接和子查询

SQL表联接和子查询,sql,oracle,join,multiple-select,Sql,Oracle,Join,Multiple Select,我需要将3个表连接在一起,并从中获取日期、价格和客户ID。以下是描述: 首先,您需要了解从2012年1月1日至今购买“自行车配件”部门产品的任何人的客户id。要实现这一点,您需要将订单、订单行和产品连接起来 然后,在父查询中,您将订单连接到订单行,并根据子查询结果中的客户id进行筛选。要计算终身订单收入,您需要对价格*数量的结果执行聚合函数 因此,我有一个带有客户id的customers表,一个带有订单号、价格和数量的orderlines表,一个带有客户id、订单号和订单日期的orders表,以

我需要将3个表连接在一起,并从中获取日期、价格和客户ID。以下是描述:

首先,您需要了解从2012年1月1日至今购买“自行车配件”部门产品的任何人的客户id。要实现这一点,您需要将订单、订单行和产品连接起来

然后,在父查询中,您将订单连接到订单行,并根据子查询结果中的客户id进行筛选。要计算终身订单收入,您需要对价格*数量的结果执行聚合函数

因此,我有一个带有客户id的customers表,一个带有订单号、价格和数量的orderlines表,一个带有客户id、订单号和订单日期的orders表,以及一个带有部门的products表,这些部门需要检索“自行车配件”。我已经写了这篇文章,根据我所做的工作,从无效的标识符到缺少的表达式,都会出现错误

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日” 卑诗省

一些注意事项:

我没有解决查询中的所有问题,只是解决了您询问的问题。 您不需要子查询。 如果使用表别名,查询的可读性会更好。我鼓励你使用它们。 编写的子查询将具有不明确的列。