mysql使用一对多、多对一关系连接,没有冗余数据

kninwzqo  于 2021-06-19  发布在  Mysql
关注(0)|答案(1)|浏览(345)

我只是在谷歌上搜索了一下,但找不到任何完美的答案来回答我的问题。我正在尝试连接三个表:订单、付款、里程碑、发票。表之间的关系如下:
订单到付款里程碑(一对多)一个订单可以有多个与之相关的付款里程碑,可能是25%、50%和25%,在不同的日期。
现在,在到达付款里程碑时间之后,将生成发票,并且在发票表中,将有订单标识和付款里程碑标识
所以,当我像这样加入他们时:

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

它还给了我:这个结果是多余的
我曾经 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

我不知道我在查询中哪里做错了。
提前谢谢!

4smxwvx5

4smxwvx51#

如果付款里程碑和发票表之间存在连接,则连接应处于启用状态 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

相关问题