mysql使用一对多、多对一关系连接,没有冗余数据
我只是在谷歌上搜索了一下,但找不到任何完美的答案来回答我的问题。我正在尝试连接三个表:订单、付款、里程碑、发票。表之间的关系如下: 订单到付款里程碑(一对多)一个订单可以有多个与之相关的付款里程碑,可能在不同日期为25%、50%和25% 现在,在到达付款里程碑时间后,将生成发票,并且在发票表中,将有订单id和付款里程碑id 所以,当我像这样加入他们时:mysql使用一对多、多对一关系连接,没有冗余数据,mysql,join,relational-database,Mysql,Join,Relational Database,我只是在谷歌上搜索了一下,但找不到任何完美的答案来回答我的问题。我正在尝试连接三个表:订单、付款、里程碑、发票。表之间的关系如下: 订单到付款里程碑(一对多)一个订单可以有多个与之相关的付款里程碑,可能在不同日期为25%、50%和25% 现在,在到达付款里程碑时间后,将生成发票,并且在发票表中,将有订单id和付款里程碑id 所以,当我像这样加入他们时: SELECT inv.invoice_id, ord.sub_total, ord.vat_added, pm.pay_date, pm.pe
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
它让我想起:
这是多余的
我使用了groupby
子句,它产生了以下结果:
我想要的结果是:
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
我不知道我在查询中哪里做错了
提前谢谢 如果在付款里程碑和发票表之间联接,则联接应在
付款里程碑id
上,而不是订单id
上。据我所知,根据您有限的问题陈述,对于每个付款里程碑\u id
,都会生成一个发票\u 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
这是条款吗necessary@MahmoodHussain很乐意帮忙:)
AS
子句不是必需的,但它有助于更清晰地阅读查询,这就是我喜欢使用它的原因