mysql 加入一对多、多对一关系且无冗余数据

mysql joins with one to many, many to one relations and no redundant data

我只是用谷歌搜索,但没有找到我的问题的完美答案。我正在尝试加入三个 tables 订单,payment_milestone,发票 tables 之间的关系是这样的:

订单到 payment_milestone(一对多)一个订单可以有多个 payment_milestone 与之相关,在不同的日期可能是 25%、50% 和 25%。

现在 payment_milestone 时间后将生成发票,在发票 table 中将有 order_id 和 payment_milestone_id

所以,当我这样加入他们时:

SELECT 
inv.invoice_id, ord.sub_total, ord.vat_added, pm.pay_date, pm.percentage
FROM orders ord
INNER JOIN
payment_milestone pm ON ord.order_id = pm.order_id 
INNER JOIN 
invoices inv ON ord.order_id = inv.order_id

它返回给我: this result 这是多余的

我使用了 GROUP BY 子句,结果如下: result

我想要的结果是这样的:

invoice_id      sub_total        vat_added        pay_date       percentage
----------------------------------------------------------------------------
11              40000.00         2000.00          2018-09-20     53
12              40000.00         2000.00          2018-09-22     47
13              45360.00         2268.00          2018-09-27     100

我不知道我在查询中哪里做错了。

提前致谢!

如果在 payment_milestone 和 invoices table 之间加入,加入应该在 payment_milestone_id 而不是 order_id。据我了解,根据您有限的问题陈述,对于每个 payment_milestone_id,都会生成一个 invoice_id

请尝试以下操作:

SELECT 
  inv.invoice_id, 
  ord.sub_total, 
  ord.vat_added, 
  pm.pay_date, 
  pm.percentage
FROM orders AS ord
INNER JOIN
  payment_milestone AS pm ON ord.order_id = pm.order_id 
INNER JOIN 
  invoices AS inv ON pm.payment_milestone_id = inv.payment_milestone_id