0

/* 显示会员已过期的日期 */

select m.FirstName, m.LastName, m.SocialSecurityNumber, m.Mobile, m.Email 
from Members as m
Join Memberships as ms on ms.MemberId = m.Id
where ms.ToDate < '2012-10-31'

一个会员可以拥有多个会员资格,但只有一个有效会员资格。这条语句给了我很多用户,如果用户有 4 个会员资格并且 3 个已过期,它将显示 3 次。如果他没有任何有效的会员资格,我只希望该会员被包括一次。

我希望你明白我在这里想要做什么。

4

2 回答 2

0

最简单的方法是获取表中所有Members不在当前订阅MemberID值列表中的人员的列表。Memberships不需要连接,因此您不会有重复项。

SELECT m.FirstName, m.LastName, m.SocialSecurityNumber, m.Mobile, m.Email 
FROM Members AS m
WHERE m.ID NOT IN ( 
    SELECT ms.MemberID 
    FROM Memberships ms 
    WHERE ms.ToDate >= '2012-10-31')
于 2012-10-31T20:47:28.327 回答
0

如果您需要获得最后一个会员资格,那么最好的方法是这样做:

select 
    m.FirstName, m.LastName,
    m.SocialSecurityNumber, m.Mobile, m.Email,
    ms.ToDate
from Members as m
    left outer join (
        select t.memberId, max(t.ToDate) as ToDate
        from Memberships as t 
        group by t.MemberId
    ) as ms on ms.MemberId = m.Id
where ms.ToDate < '2012-10-31' or ms.ToDate is null
于 2012-10-31T20:50:23.487 回答