Как посчитать строки, которые не совпадают между двумя таблицами в MySQL? - PullRequest
1 голос
/ 04 апреля 2019

У меня есть следующие таблицы:

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).

Как я могусделать это?

Ответы [ 2 ]

3 голосов
/ 04 апреля 2019

Мы можем попробовать использовать подход левого соединения здесь:

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

Демо

1 голос
/ 04 апреля 2019

Использование 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, даже если в * 1006 имеется несколько совпадающих записей.*.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...