【问题标题】:How to convert a query into a nested query如何将查询转换为嵌套查询
【发布时间】:2020-01-29 09:59:09
【问题描述】:

如何将此查询更改为嵌套查询? 下面列出了查询和表。

SELECT 
  Nation.N_NAME as "nation", 
  ROUND(
    SUM(
      Lineitem.L_QUANTITY * (Lineitem.L_EXTENDEDPRICE - Lineitem.L_DISCOUNT)
    ), 2
  ) AS "order size"
FROM Nation
JOIN Supplier ON Nation.N_NATIONKEY = Supplier.S_NATIONKEY
JOIN Customer ON Supplier.S_NATIONKEY = Customer.C_NATIONKEY
JOIN Orders ON Customer.C_CUSTKEY = Orders.O_CUSTKEY
JOIN Lineitem ON Orders.O_ORDERKEY = Lineitem.L_ORDERKEY
WHERE Lineitem.L_SUPPKEY = Supplier.S_SUPPKEY
GROUP BY Nation.N_NAME
;

表格如下

国家:N_NATIONKEY,N_NAME

供应商:S_SUPPKEY、S_NAME、S_NATIONKEY

客户:C_CUSTKEY、C_NAME、C_NATIONKEY

订单:O_ORDERKEY、O_CUSTKEY

订单项:L_ORDERKEY、L_SUPPKEY、L_QUANTITY、L_EXTENDEDPRICE、L_DISCOUNT

【问题讨论】:

    标签: sql sqlite subquery


    【解决方案1】:

    我不确定您正在寻找哪种nested join,但这里有一个选项:

    SELECT
      src.N_NAME as "nation", 
      ROUND(
        SUM(
          lineitem.L_QUANTITY * (lineitem.L_EXTENDEDPRICE - lineitem.L_DISCOUNT)
        ), 2
      ) AS "order size"
    FROM lineitem -- Get line items
    INNER JOIN (
      SELECT nation.N_NAME, supplier.S_SUPPKEY, Orders.O_ORDERKEY
      FROM nation
      JOIN Supplier ON Nation.N_NATIONKEY = Supplier.S_NATIONKEY
      JOIN Customer ON Supplier.S_NATIONKEY = Customer.C_NATIONKEY
      JOIN Orders ON Customer.C_CUSTKEY = Orders.O_CUSTKEY
    ) src ON lineitem.L_SUPPKEY = src.S_SUPPKEY AND lineitem.L_ORDERKEY = src.O_ORDERKEY
    GROUP BY src.N_NAME
    

    我还没有测试过,但试一试,看看它是否有效。如果它没有给你你想要的,请发布一些示例数据。

    【讨论】:

    • 什么是src?我尝试运行它,但它告诉我该表没有这样的列
    • src 是嵌套查询的别名。运行上述查询时是否出现错误?如果是这样,请发布完整的错误消息。
    • * sqlite:///TPC-H.db (sqlite3.OperationalError) 没有这样的列:src.O_ORDERKEY(此错误的背景:sqlalche.me/e/e3q8
    • 糟糕,我忘记在SELECT 列表中包含Orders.O_ORDERKEY。我更新了上面的查询。再试一次。
    • 是的,我发现并添加了它,仍然说没有这样的列 Nation.N_NAME 作为操作错误
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2023-01-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-01-16
    相关资源
    最近更新 更多