我陷入了这个SQL问题:我需要找到所有未缴纳2014年年费的成员。这是数据库的示例:
Table 'members'
| ID | name |
---------------
| 1 | Franck |
| 2 | Andy |
| 3 | Jack |
Table 'payements'
| ID | memberID | year | amount |
------------------------------------
| 1 | 1 | 2013 | 100 |
| 2 | 1 | 2014 | 100 |
| 3 | 2 | 2013 | 100 |
我尝试过这样的事情:
SELECT members.name FROM members
LEFT JOIN payements ON (payements.memberID = members.ID)
WHERE (payements.year = 2014 AND payements.amount < 100) OR payements.memberID IS NULL
我的查询正确地找到了杰克(他从没支付过任何东西),但是却找不到安迪,因为条目存在了一年。我该如何要求所有没有2014年专门参赛作品(或参赛作品数量少于100个)的会员?
考虑数据集
我们将集合作为左联接(不包括2014年已付款者)将其联接在一起,我们将联接数限制添加到了清单中,以便仅列出当年的全额付款。然后,我们将从完整的用户集中排除那些用户。
Select m.name, p.memberid, p.year, p.amount
from members m
LEFT JOIN payements p
on m.id = p.memberId
and (p.year = 2014 and p.amount >= 100)
WHERE p.year is null
您的目录不起作用的原因是where子句使外部联接成为内部联接。AND,因为您想要一组尚未付款的用户。不是已经付款的人。因此,我们需要将第二组设置为已付款的人...将<更改为> =。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句