gpt4 book ai didi

mysql - 如何解决这个特定的 SQL 查询?

转载 作者:行者123 更新时间:2023-11-29 05:19:23 25 4
gpt4 key购买 nike

我遇到了一个 SQL 问题:我需要找到所有没有支付 2014 年年费的成员(member)。下面是数据库示例:

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

我的查询正确地找到了 Jack(他从未支付过任何费用),但没有找到 Andy,因为条目存在另一年。 2014年没有具体报名(或报名金额低于100)的成员(member),如何查询?

最佳答案

以集合的形式考虑这些数据

  1. 设置 1 每个应该支付的人
  2. 设置 2 个正确支付的人

我们将集合作为左连接连接在一起,排除了 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 子句使外部连接成为内部连接。并且因为您想要一组尚未付款的用户。不是付钱的那个集合。所以我们需要将第二组设置为已付款的人...将 < 更改为 >=。

关于mysql - 如何解决这个特定的 SQL 查询?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27909066/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com