Я полагаю, что на самом деле нет пропущенных строк, а скорее, что 3 из 15 строк, возвращаемых первым запросом, на самом деле являются дублирующими id
значениями.
Чтобы увидеть, как это может работать, учтите, что первый запрос вернул следующие 5 id
значений (для простоты):
1
1
1
2
2
На самом деле существует 5 id
значений, но только 2 на самом деле уникальны. Затем следующее WHERE
предложение:
WHERE id IN (1, 1, 1, 2, 2)
равносильно тому, чтобы просто сказать:
WHERE id IN (1, 2)
Другая возможность этого может заключаться в том, что tableB
просто не содержит все id
, возвращаемые первым запросом.
Чтобы найти пропущенные строки, есть один способ:
WITH cte AS (
SELECT REPLACE(REPLACE(id, '[', ''), ']', '') AS ID
FROM tableA
WHERE COL1= 'TEST'
)
SELECT a.ID
FROM cte a
LEFT JOIN tableB b
ON a.ID = b.ID
WHERE b.ID IS NULL;