代码之家  ›  专栏  ›  技术社区  ›  4est

显示缺少的行(oracle、sql)

  •  0
  • 4est  · 技术社区  · 7 年前

    我在下面选择了:

    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
    

    1 回复  |  直到 7 年前
        1
  •  1
  •   Tim Biegeleisen    7 年前

    我建议实际上没有任何丢失的行,而是第一个查询返回的15行中有3行实际上是重复的 id

    若要了解这可能如何工作,请考虑第一个查询返回以下5个 身份证件

    1
    1
    1
    2
    2
    

    实际上有5个 身份证件 值,但实际上只有2个是唯一的。那么,下面 WHERE 条款:

    WHERE id IN (1, 1, 1, 2, 2)
    

    等于说:

    WHERE id IN (1, 2)
    

    tableB 身份证件

    要查找缺少的行,有一种方法:

    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;