我已经在选择下面运行了
select replace(replace(id,'[',''),']','') as ID from tableA where COL1= 'TEST';
它返回 15行。
example of id:
1abc
3def
9abc
..
..
..
14abc
然后我正在将该ID查找到其他表中
select col1, col3 from tableB where
id in (select replace(replace(id,'[',''),']','') from tableA where COL1= 'TEST');
它返回 12行。
1abc city1
2def city2
5abc city2
.. ..
12abc city3
如何显示缺少的3行?
答案 0 :(得分:1)
我建议实际上没有丢失的行,但是,第一个查询返回的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;