微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

创建基于多个 JOINS

如何解决创建基于多个 JOINS

我们面临无法开始工作的问题,也许我们对困难的 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 个相关行。

enter image description here


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

  • ORDER_ID | order.id
  • ORDER_DATE | order.created
  • ORDER_AMOUNT | order.amount 此值是来自 order_itemorder_upsellorder_addition 的所有项目的组合。
  • ORDER_TAX |这应该用总和(所有值加在一起)来计算。就像上面的值有 6 个相关的行。为了计算这个数量,每行的百分比(无论是在表order_itemorder_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 举报,一经查实,本站将立刻删除。