我有下表:
Users
:
ID LastPaymentDate
1 2017-01-01
2 2018-02-05
3 2018-04-06
5 NULL
ActivityLog
:
ID ActivityDate
1 2017-01-01
1 2017-05-17
3 2018-05-20
我需要找出拥有LastPaymentDate
但不匹配ActivityDate
的用户数量
上述数据的输出结果为:2
(UserID
3和2)。
我该怎么做?
答案 0 :(得分:3)
我们可以在此处尝试使用左联接方法:
SELECT u.ID, u.LastPaymentDate
FROM Users u
LEFT JOIN ActivityLog a
ON u.ID = a.ID AND u.LastPaymentDate = a.ActivityDate
WHERE
a.ID IS NULL AND u.LastPaymentDate IS NOT NULL;
答案 1 :(得分:1)
使用NOT EXISTS
:
SELECT COUNT(*)
FROM Users u
WHERE
u.LastPaymentDate IS NOT NULL
AND NOT EXISTS (
SELECT 1
FROM ActivityLog a
WHERE u.ID = a.ID AND u.ActivityDate = a.ActivityDate
)
这种方法的优点是,即使在Users
中有多个匹配的记录,它也不会在ActivityLog
中记录数次。