Почему мой запрос не работает, как ожидалось?
У меня есть запрос, в котором я пытаюсь получить конкретные значения, которых нет в этой другой таблице, но когда я запускаю запрос, я не получаю результатов. Вот что я вижу. Пожалуйста, дайте мне знать, что происходит не так.
Исходный запрос: возвращает 399 строк
USE TFW_DEV
SELECT
unitid, unitnumber
FROM
Units
WHERE
createdon BETWEEN '2016-11-01 00:00:00' AND '2016-11-03 23:59:59'
ORDER BY
unitnumber
Запрос, чтобы увидеть, где таблицы обмениваются данными: возвращает 50 строк
USE TFW_DEV
SELECT
unitid, unitnumber
FROM
Units
WHERE
createdon BETWEEN '2016-11-01 00:00:00' AND '2016-11-03 23:59:59'
AND unitid IN
(
SELECT
unitid
FROM
meteraudit
)
ORDER BY
unitnumber
Окончательный запрос с NOT IN: возвращает 0 строк
USE TFW_DEV
SELECT
unitid, unitnumber
FROM
Units
WHERE
createdon BETWEEN '2016-11-01 00:00:00' AND '2016-11-03 23:59:59'
AND unitid NOT IN
(
SELECT
unitid
FROM
meteraudit
)
ORDER BY
unitnumber
Я ожидаю, что последний запрос вернет 349 строк правильно? Если нет, что я делаю не так? Спасибо,
1 ответ
Решение
NOT IN
не удается, когда есть NULL
значение, возвращаемое из Sub-Query
использование NOT EXISTS
SELECT unitid,
unitnumber
FROM units U
WHERE createdon BETWEEN '2016-11-01 00:00:00' AND '2016-11-03 23:59:59'
AND NOT EXISTS (SELECT 1
FROM meteraudit M
WHERE U.unitid = M.unitid)
ORDER BY unitnumber