gpt4 book ai didi

mysql - 将 3 个表连接到一个表(连接 4 个表)

转载 作者:行者123 更新时间:2023-11-29 07:22:04 25 4
gpt4 key购买 nike

我有 3 个销售表和 1 个包含所有产品 ID 的产品表。我需要将销售表与产品表结合起来以获得每周的销售额。

Tables and how they relate

我尝试了几种不同的连接方法和联合。每次我得到错误的输出(要么太多,要么像交叉连接)。目前我运行了 3 个不同的查询,导出这些表并在 excel 中手动合并这些表。

我尝试过的连接示例。

SELECT p1.product, p2.week, 
p2.sales, p2.QTY,
p3.sales, p3.QTY,
p4.sales, p4.QTY
FROM products_table p1 INNER JOIN aplha_sales p2 ON p1.alpha_product_id = p2.alpha_product_id
INNER JOIN beta_sales p3 ON p1.beta_product_id = p3.beta_product_id
INNER JOIN delta_sales p4 ON p1.delta_id = p4.delta_product_id
WHERE p2.week >= '2019-04-19';

我想要一个包含以下列的表格:

Desired Output

最佳答案

您需要在联接中包含周,以便您只从每个表中获取该周的数据。

SELECT p1.product, p2.week, 
p2.sales, p2.QTY,
p3.sales, p3.QTY,
p4.sales, p4.QTY
FROM products_table p1
INNER JOIN aplha_sales p2 ON p1.alpha_product_id = p2.alpha_product_id
INNER JOIN beta_sales p3 ON p1.beta_product_id = p3.beta_product_id AND p3.week = p2.week
INNER JOIN delta_sales p4 ON p1.delta_id = p4.delta_product_id AND p4.week = p2.week
WHERE p2.week >= '2019-04-19';

请注意,这只会生成所有 3 种产品均有销售的周的行。您可以使用 LEFT JOIN使其中 2 个表的 sales 可选。但要使其对所有 3 个都是可选的 XXX_sales您需要与定义所需周数的另一个表连接的表,然后是 LEFT JOIN与所有销售表。

SELECT p1.product, w.week, 
p2.sales, p2.QTY,
p3.sales, p3.QTY,
p4.sales, p4.QTY
FROM products_table p1
CROSS JOIN (
SELECT week FROM alpha_sales WHERE week >= '2019-04-19'
UNION
SELECT week FROM beta_sales WHERE week >= '2019-04-19'
UNION
SELECT week FROM delta_sales WHERE week >= '2019-04-19') AS w
LEFT JOIN aplha_sales p2 ON p1.alpha_product_id = p2.alpha_product_id AND p2.week = w.week
LEFT JOIN beta_sales p3 ON p1.beta_product_id = p3.beta_product_id AND p3.week = w.week
LEFT JOIN delta_sales p4 ON p1.delta_id = p4.delta_product_id AND p4.week = w.week

UNION在子查询中将合并任何销售表中的所有周。默认情况下,UNION删除重复项,因此您不会每周获得多行。

关于mysql - 将 3 个表连接到一个表(连接 4 个表),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55803623/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com