【发布时间】:2021-09-08 08:43:42
【问题描述】:
我有一个多对多 relationship 由三个表表示:quote、payment 和 quote_payment,因为一个报价可以有多次付款尝试,而一次付款可以用于多个报价。我的目标是进行查询,以返回所有已付款或未付款的报价。
因此,如果报价至少有一次付款,其中 is_paid = true 它应该在我的已付款报价查询中显示一次,如果没有,它应该在我尝试获取时显示尚未支付的报价。
目前,我有这个用于显示已支付报价的查询:
select distinct quote.name, payment.is_paid from quote
join quote_payment on (quote.id = quote_payment.quote_id)
join payment on (payment.id = quote_payment.payment_id)
where payment.is_paid is true;
对于那些尚未付款的人:
select distinct quote.name, payment.is_paid from quote
join quote_payment on (quote.id = quote_payment.quote_id)
join payment on (payment.id = quote_payment.payment_id)
where payment.is_paid is false;
问题是当我尝试获取尚未支付的报价时。例如,如果报价有一笔付款失败而另一笔付款成功,则它不应显示在未付款报价的查询中。
我还尝试将 is_paid 列放入 quote,而不是 payment,但这需要我在付款成功时更新与付款相关的所有报价,但也许这就是我应该做的正在做。考虑到这种模式,您将如何继续获取没有成功付款的报价?
Here's the schema with example data and some attempts I've made.
【问题讨论】:
-
通常不是根据发票付款吗?
标签: mysql sql join select many-to-many