mysql以一对多,多对一关系加入,没有冗余数据

时间:2018-09-30 03:12:47

标签: mysql join relational-database

我只是在Google周围搜索,但找不到对我的问题的完美答案。我正在尝试加入三个表订单,payment_milestone,发票表之间的关系是这样的:

付款里程碑的订单(一对多)一个订单可以有许多与其相关的付款里程碑,在不同的日期可能分别是25%,50%和25%。

现在,在payment_milestone时间到达后,将生成发票,并且在发票表中,将有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

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

提前谢谢!

1 个答案:

答案 0 :(得分:0)

如果在Payment_milestone和发票表之间进行联接,则联接应位于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