У меня есть два SQL-запроса, которые дают разные результаты, когда я ожидаю, что они дадут одинаковый результат. Я пытаюсь найти количество событий, которые не имеют соответствующего местоположения. Во всех местоположениях есть событие, но события могут также связываться с записями, не относящимися к местоположению.
Следующий запрос дает 16244 правильное значение.
SELECT COUNT(DISTINCT e.event_id)
FROM events AS e
WHERE NOT EXISTS
(SELECT * FROM locations AS l WHERE l.event_id = e.event_id)
Следующий запрос производит счетчик 0.
SELECT COUNT(DISTINCT e.event_id)
FROM events AS e
WHERE e.event_id NOT IN (SELECT l.event_id FROM locations AS l)
Следующий SQL делает некоторые сводки набора данных
SELECT 'Event Count',
COUNT(DISTINCT event_id)
FROM events
UNION ALL
SELECT 'Locations Count',
COUNT(DISTINCT event_id)
FROM locations
UNION ALL
SELECT 'Event+Location Count',
COUNT(DISTINCT l.event_id)
FROM locations AS l JOIN events AS e ON l.event_Id = e.event_id
И возвращает следующие результаты
Event Count 139599
Locations Count 123355
Event+Location Count 123355
Может ли кто-нибудь пролить свет на то, почему два начальных запроса не дают одинаковую цифру.