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
我只是用谷歌搜索,但没有找到我的问题的完美答案。我正在尝试加入三个 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