繁体   English   中英

在 MySQL 中过滤一对多关系

[英]Filtering on a one-to-many relationship in MySQL

我有一个关于在 MySQL 中过滤的问题。 我有两张表,一张是会员,一张是会员数据。 我喜欢能够加入两个表并能够过滤:

  • 仍为活跃会员的会员(以 2020 年 10 月 6 日为参考日期)
  • 不再是活跃会员的会员

任何人都可以给我正确的 SQL 代码过滤器吗? 我不太擅长这个更高级的 SQL 语句。 提前谢谢了!

会员

+----+------------+
| ID |   Name     |
+----+------------+
| 01 | Gerico     |
| 02 | Stefan     |
+----+------------+

会员资格

+----+------------+-------------+------------+
| ID | MemberID   | From        | To         |
+----+------------+-------------+------------+
| 01 |         01 | 01/01/1990  | 01/01/2000 |
| 02 |         01 | 01/01/2005  | 31/12/2154 |
| 03 |         02 | 01/01/1990  | 01/01/2000 |
| 04 |         02 | 01/01/1992  | 31/12/1999 |
+----+------------+-------------+------------+

我假设一个活跃会员是一个会员,其日期范围包括当前日期。 然后选择活跃成员:

SELECT DISTINCT Members.* FROM
Members JOIN Membership ON Members.ID = Membership.MemberID
WHERE CURDATE() BETWEEN Membership.`From` AND Membership.`To`

(如果成员具有多个重叠的成员资格,则执行SELECT DISTINCT 。)

或者你可以使用:

SELECT * FROM Members
WHERE EXISTS (
    SELECT ID FROM Membership WHERE CURDATE() BETWEEN `From` AND `To` AND MemberID = Members.ID
)

选择非活跃成员:

SELECT * FROM Members
WHERE NOT EXISTS (
    SELECT ID FROM Membership WHERE CURDATE() BETWEEN `From` AND `To` AND MemberID = Members.ID
)

见 db-fiddle

@Strawberry 发表的评论指的是 OP 有责任创建上述 db-fiddle 或等效项,以便人们能够对我们进行测试。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM