Почему мой запрос не работает, как ожидалось?

У меня есть запрос, в котором я пытаюсь получить конкретные значения, которых нет в этой другой таблице, но когда я запускаю запрос, я не получаю результатов. Вот что я вижу. Пожалуйста, дайте мне знать, что происходит не так.

Исходный запрос: возвращает 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 
Другие вопросы по тегам