【发布时间】:2017-06-27 10:54:50
【问题描述】:
我在从数据库的两个表中获取值时遇到了一些问题。 我的数据库中有两张表,一张是内存,第二张是付款 mem 存储用户的名字和drawid 支付表存储用户的抽奖和分期付款
用户每月向我们付款。 因此,如果抽奖 id 为 1 的用户在 2 月向我们付款,则两个表中的值是 mem drawid=1 和 name = something 付款抽奖 = 1 分期付款 = 2
在mem中的drawid和在payment中的drawid一样
所以表格有多对多的关系。 现在我需要找到所有在第 4 个月之前连一期都没有付款的会员列表。
我正在使用这个查询
SELECT drawid,contact,dnd,mem.name, count(*) as numPayments FROM mem
LEFT JOIN payment ON (mem.drawid = payment.draw) GROUP BY
drawid HAVING numPayments < 4
一切正常,没有问题,唯一的问题是我还需要显示用户已支付的分期付款,因此我需要从表付款中获取所有分期付款,然后通过 while 循环显示。
这个查询很完美,但它给了我重复的结果!!!
SELECT drawid,contact,dnd,mem.name, count(*) as numPayments,NULL numPaidPayments ,NULL PAID_CONTACT,NULL NAME_PAID FROM mem
LEFT JOIN payment ON (mem.drawid = payment.draw) GROUP BY
drawid HAVING numPayments < 4
UNION
SELECT NULL drawid,NULL contact, NULL dnd, NULL name,NULL numPayments,COUNT(*) as numPaidPayments ,contact PAID_CONTACT,mem.name NAME_PAID FROM mem
INNER JOIN payment ON (mem.drawid = payment.draw) GROUP BY
drawid HAVING numPaidPayments >= 4
【问题讨论】:
-
你有错误..? .磨损结果? ...更新您的帖子添加适当的数据样本和预期结果
-
我没有任何错误,这个查询运行良好,我只想让这个查询也给我按用户分期付款的列表。
-
给我们一些样本数据和对应的结果。
-
在您之前版本的这个问题中,您推断会员可以选择付款的月份,并且他可以提前、拖欠或按时付款 - 或这些状态的任何组合。还是这样吗?
-
是的,用户也可以选择月份预付