У меня есть три таблицы: пациенты, чаты и salesforce_leads.Я хочу найти все электронные письма в чатах, которых нет в двух других таблицах.Моя первая попытка вернула 0, и я очень озадачен, почему.Ниже приведены запросы и их результаты:
Запрос 1: Первая попытка с неожиданными результатами
SELECT CouNT(DISTINCT LOWER(chat_email)) FROM chats
WHERE LOWER(chat_email) NOT IN (
SELECT LOWER(email) FROM patients
UNION ALL
SELECT LOWER(lead_email) FROM salesforce_leads)
[ { 'COUNT(DISTINCT LOWER(chat_email))': 0 } ]
Результат: 0
Естественно неудовлетворен этимответ, я попробовал следующее:
Запрос 2: Сколько существует в обоих?
SELECT CouNT(DISTINCT LOWER(chat_email)) FROM chats
WHERE LOWER(chat_email) IN (
SELECT LOWER(email) FROM patients
UNION ALL
SELECT LOWER(lead_email) FROM salesforce_leads)
[ { 'COUNT(DISTINCT LOWER(chat_email))': 701 } ]
Результат: 701
Запрос3: Сколько уникальных писем?
SELECT COUNT(DISTINCT LOWER(chat_email)) FROM chats
[ { 'COUNT(DISTINCT LOWER(chat_email))': 1059 } ]
Результат: 1059
Так что я бы ожидал, что результат запроса 1 будет 358 (1059 - 701).Я наконец смог получить этот результат, выполнив запрос 4 ниже, но я не понимаю, почему.
Запрос 4: достигает ожидаемого результата, но он не симпатичен и использует дополнительный подзапрос.
SELECT CouNT(DISTINCT LOWER(chat_email)) FROM chats
WHERE LOWER(chat_email) NOT IN (
SELECT DISTINCT(LOWER(chat_email)) FROM chats
WHERE LOWER(chat_email) IN (
SELECT LOWER(email) FROM patients
UNION ALL
SELECT LOWER(lead_email) FROM salesforce_leads))
[ { 'COUNT(DISTINCT LOWER(chat_email))': 358 } ]
Может кто-нибудь объяснить мне, почему запрос 1 может не совпадать с результатом запроса 4?
Это использует node.js и sqlite3.