3 Table Inner Join

时间:2017-01-10 02:19:44

标签: sql sqlite inner-join

我有三个表:股票,订单和订单。我在Order表中有一个Total列,我希望包含每个订单的订单行总和。 Orderline表由Order_id,Stock_id和Qty组成,Stock表具有Stock_id和Price。我可以过滤与每个Order_id关联的Stock_ids并显示每个Order_id的数量,我认为我需要使用内部联接来计算每个订单的成本,方法是将每个Stock_id的价格相加并将其乘以Orderline中的数量表和Stock表中的价格,但我不知道从哪里开始。我还希望在为每个Order_id计算时将其添加到数据库中的Total列中,并且不知道如何执行此操作。我使用的是SQLite3。任何帮助将不胜感激。

订单表: order_id,order_total,order_datetime

订单表: order_id,stock_id,qty

股票表: stock_id,stock_price,stock_name

1 个答案:

答案 0 :(得分:1)

这是一个基本查询,INNER JOIN按订单ID分组,以按订单提供总计。您可以在WHERE之前的GROUP BY子句中执行您需要的任何过滤器。

SELECT
    O.order_id,
    SUM(S.stock_price * OL.qty) AS [Total]
FROM Order O
    INNER JOIN Orderline OL
        ON OL.order_id = O.order_id
    INNER JOIN Stock S
        ON S.stock_id = OL.stock_id
GROUP BY
    O.order_id

虽然sqlite不支持计算列,但您有2个选项:

  1. 创建添加到Order表的列以存储总计的值,然后在OrderlineStock表上创建触发器,以重新计算已修改记录的总计。< / LI>
  2. 将上面的查询转换为单独的视图,然后在需要总计时从创建的视图到INNER JOIN表格执行Order