显示缺失的行(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;
我下面有 运行 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;