[英]Filtering on a one-to-many relationship in MySQL
I have a question regarding filtering in MySQL.我有一个关于在 MySQL 中过滤的问题。 I have two tables one with members and one with membership data.我有两张表,一张是会员,一张是会员数据。 I like to be able to join the two tables and be able to filter on:我喜欢能够加入两个表并能够过滤:
Can anyone give me the correct SQL code the filter on this?任何人都可以给我正确的 SQL 代码过滤器吗? I am not realy good in this more advanced SQL statements.我不太擅长这个更高级的 SQL 语句。 Many thanks in advance!提前谢谢了!
Members会员
+----+------------+
| ID | Name |
+----+------------+
| 01 | Gerico |
| 02 | Stefan |
+----+------------+
Membership会员资格
+----+------------+-------------+------------+
| 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 |
+----+------------+-------------+------------+
I am assuming an active member is one who has a membership whose date range includes the current date.我假设一个活跃会员是一个会员,其日期范围包括当前日期。 Then to select active members:然后选择活跃成员:
SELECT DISTINCT Members.* FROM
Members JOIN Membership ON Members.ID = Membership.MemberID
WHERE CURDATE() BETWEEN Membership.`From` AND Membership.`To`
(A SELECT DISTINCT
is done in case a member has multiple, overlapping memberships.) (如果成员具有多个重叠的成员资格,则执行SELECT DISTINCT
。)
Or you can use:或者你可以使用:
SELECT * FROM Members
WHERE EXISTS (
SELECT ID FROM Membership WHERE CURDATE() BETWEEN `From` AND `To` AND MemberID = Members.ID
)
To select non-active members:选择非活跃成员:
SELECT * FROM Members
WHERE NOT EXISTS (
SELECT ID FROM Membership WHERE CURDATE() BETWEEN `From` AND `To` AND MemberID = Members.ID
)
The comment made by @Strawberry refers to the responsibility of the OP to create the above db-fiddle or equivalent for people to be able to test against us. @Strawberry 发表的评论指的是 OP 有责任创建上述 db-fiddle 或等效项,以便人们能够对我们进行测试。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.