问题描述
我们面临无法开始工作的问题,也许我们对困难的 MysqL 查询的了解不足。我们尝试了 INNER/OUTER/LEFT/RIGHT JOIN 的几种方法。
我们的目标是创建一个 .csv 文件作为所有订单(包括其商品)的报告。订单(存储在表 order
中)与多个表(如组织、客户等)有关系。其中 3 个应该加入到我们的结果中:
order_item
order_upsell
order_addition
我们有一个 ID 为 #196 的订单,在这 3 个表中共有 6 个相关行:
-
order_item
中的 4 行与order.id
>order_item.order_id
相关
-
order_upsell
中的 1 行与order.id
>order_upsell.order_id
相关
-
order_addition
中的 1 行与order.id
>order_addition.order_id
相关
我们的预期输出是 6 行,我们需要它来连接来自 tax_id
的列来计算定价。但是当我们执行下面的查询时,只返回了 4 行。我们认为这是因为 order_item
中有 4 个相关行。
我们应该得到的结果需要以下列:
- ORDER_ID |
order.id
- ORDER_DATE |
order.created
- ORDER_AMOUNT |
order.amount
此值是来自order_item
、order_upsell
和order_addition
的所有项目的组合。 - ORDER_TAX |这应该用总和(所有值加在一起)来计算。就像上面的值有 6 个相关的行。为了计算这个数量,每行的百分比(无论是在表
order_item
、order_upsell
还是order_addition
中)应该从表{{ 1}}。 - 产品 |
tax
应该从表product.name
中检索,基于product
。请注意,每个订单的所有 product_id 始终相同。这意味着,order_item
都有相同的相关产品。 - CUSTOMER_FirsTNAME |
order_item
- CUSTOMER_LASTNAME |
customer.firstname
- CUSTOMER_EMAIL |
customer.lastname
根据下面的表格数据,这应该是输出:
ORDER_ID | ORDER_DATE | ORDER_AMOUNT | ORDER_TAX | 产品 | CUSTOMER_FirsTNAME | CUSTOMER_LASTNAME | CUSTOMER_EMAIL |
---|---|---|---|---|---|---|---|
1 | 2021-01-01 00:00:00 | 12.50 | 1.94 | 示例产品 | 乔迪 | 范图伊 | jordi@example.com |
税收将以此方式计算,也适用于以下数据:
行 | 价格 | 税收百分比 | 税额 |
---|---|---|---|
ID 1 来自 customer.email
|
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_item
|
1.00 | 21% | 1.00 - (1.00 / 1.21) = 0.17355 |
ID 1 来自 order_upsell
|
1.50 | 21% | 1.50 - (1.50 / 1.21) = 0.26033 |
来自所有行的字段 order_addition
的总值为“12.50”,与值 ORDER_AMOUNT
匹配。
字段 order.amount
的总值是上面 4 行的总和,即“1.94”(四舍五入到 2 位小数)。匹配值 ORDER_TAX
。
order.tax
MysqL 表:
表: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);
id | customer_id | 金额 | 税 | 创建 |
---|---|---|---|---|
1 | 1 | 12.50 | 1.94 | 2021-01-01 00:00:00 |
表:order
id | order_id | product_id | tax_id | 金额 |
---|---|---|---|---|
1 | 1 | 1 | 1 | 7.50 |
2 | 1 | 1 | 2 | 2.50 |
表:order_item
id | order_id | upsell_id | tax_id | 金额 |
---|---|---|---|---|
1 | 1 | 1 | 1 | 1.00 |
表:order_upsell
id | order_id | addition_id | tax_id | 金额 |
---|---|---|---|---|
1 | 1 | 1 | 1 | 1.50 |
表:order_addition
id | 名字 | 姓氏 | 电子邮件 |
---|---|---|---|
1 | 乔迪 | 范图伊 | jordi@example.com |
表:customer
id | 姓名 | 百分比 |
---|---|---|
1 | 高税收 | 21 |
2 | 低税 | 9 |
表:tax
id | 姓名 |
---|---|
1 | 示例产品 |
非常感谢所有帮助:-)
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)