首页 > 解决方案 > 基于多个 JOINS 创建输出

问题描述

我们正面临一个我们无法开始工作的问题,也许我们对困难的 MySQL 查询了解不足。我们用 INNER/OUTER/LEFT/RIGHT JOIN 尝试了几件事。

我们的目标是创建一个 .csv 文件作为所有订单的报告,包括他们的商品。订单(存储在 table 中order)与多个表(如组织、客户等)有关系。其中,3 个应该加入我们的结果中:


我们有一个 ID #196 的订单,这 3 个表中共有 6 个相关行:

我们的预期输出是 6 行,我们需要它来加入一列tax_id来计算定价。但是当我们执行下面的查询时,只返回了 4 行。我们认为发生这种情况是因为order_item.

在此处输入图像描述


我们应该得到的结果需要以下列:

根据下表数据,这应该是输出:

ORDER_ID 订购日期 订单金额 ORDER_TAX 产品 CUSTOMER_FIRSTNAME CUSTOMER_LASTNAME CUSTOMER_EMAIL
1 2021-01-01 00:00:00 12.50 1.94 示例产品 霍尔迪 范图伊 jordi@example.com

税收将以这种方式计算,也基于以下数据:

价格 税率 税额
ID 1来自order_item 7.50 21% 7.50 - (7.50 / 1.21) = 1.30165
ID 2来自order_item 2.50 9% 2.50 - (2.50 / 1.09) = 0.20642
ID 1来自order_upsell 1.00 21% 1.00 - (1.00 / 1.21) = 0.17355
ID 1来自order_addition 1.50 21% 1.50 - (1.50 / 1.21) = 0.26033

所有行中字段ORDER_AMOUNT的总价值为“12.50”,与 value 匹配order.amount
字段ORDER_TAX的总值是上面 4 行的总和,即“1.94”(四舍五入到小数点后两位)。哪个匹配 value order.tax

SELECT *
FROM `order` o
LEFT JOIN `order_item` oi ON (oi.order_id = o.id)
LEFT JOIN `order_upsell` ou ON (ou.order_id = o.id)
LEFT JOIN `order_addition` oa ON (oa.order_id = o.id);

MySQL 表:

我删除了与此问题无关的列以保持内容清晰。

桌子:order

ID 客户ID 数量 创建
1 1 12.50 1.94 2021-01-01 00:00:00

桌子:order_item

ID order_id product_id tax_id 数量
1 1 1 1 7.50
2 1 1 2 2.50

桌子:order_upsell

ID order_id upsell_id tax_id 数量
1 1 1 1 1.00

桌子:order_addition

ID order_id add_id tax_id 数量
1 1 1 1 1.50

桌子:customer

ID 电子邮件
1 霍尔迪 范图伊 jordi@example.com

桌子:tax

ID 姓名 百分比
1 高税 21
2 低税 9

桌子:product

ID 姓名
1 示例产品

所有帮助将不胜感激:-)

标签: mysqljoinrelation

解决方案


推荐阅读