显示缺失的行(oracle,sql)

Display missing rows (oracle, sql)

我下面有 运行 select:

select replace(replace(id,'[',''),']','') as ID from tableA where COL1= 'TEST';

它returns 15行.

example of id:

1abc
3def
9abc
..
..
..
14abc

然后我正在将此 ID 查找到其他 table:

select col1, col3 from tableB where 
      id in (select replace(replace(id,'[',''),']','') from tableA where COL1= 'TEST');

它returns12行。

1abc   city1
2def   city2
5abc   city2
..     ..
12abc  city3

如何显示缺失的3行?

我建议实际上没有任何缺失的行,而是第一个查询返回的 15 行中有 3 行实际上是重复的 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;