【问题标题】:SQL table joins and subqueriesSQL 表连接和子查询
【发布时间】:2014-04-01 01:09:04
【问题描述】:

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

救命!

【问题讨论】:

    标签: sql oracle join multiple-select


    【解决方案1】:

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

    这很容易解决:

    来自(选择 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' ) 公元前

    一些注意事项:

    • 我没有解决查询中的所有问题,只是解决了您询问的问题。
    • 您不需要子查询。
    • 使用表别名,您的查询会更易读。我鼓励您使用它们。
    • 所写的子查询将包含不明确的列。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2023-03-29
      • 2020-09-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-09-14
      相关资源
      最近更新 更多