如何计算MySQL中两个表之间不匹配的行?

时间:2019-04-04 15:21:33

标签: mysql sql

我有下表:

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的用户数量

上述数据的输出结果为:2UserID 3和2)。

我该怎么做?

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;

enter image description here

Demo

答案 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中记录数次。