代码之家  ›  专栏  ›  技术社区  ›  Moh-Aw

从给定集合中查找表中缺少的值

  •  0
  • Moh-Aw  · 技术社区  · 6 年前

    假设有一个名为“allvalues”的表,其中有一列名为“column”。 此列包含值“A”到“J”,但缺少“H”。

    我得到了一组从“G”到“J”的值。

    以下操作不起作用:

    select * from allvalues where column not in ('G', 'H', 'I', 'J')
    

    A, B, C, D, E, F, H 也包含未包含在给定集合中的值。

    3 回复  |  直到 6 年前
        1
  •  2
  •   Gordon Linoff    6 年前

    您需要从一个包含正在检查的值的(派生)表开始。一种明确的方法是:

    with testvalues as (
          select 'G' as val from dual union all
          select 'H' as val from dual union all
          select 'I' as val from dual union all
          select 'J' as val from dual 
         )
    select tv.val
    from testvalues tv
    where not exists (select 1 from allvalues av where av.column = tv.val);
    

        2
  •  0
  •   Wouter    6 年前

    取决于您可以使用哪种SQL语法,但基本上您希望检查表allvalues+额外的值。

    如:

    SELECT *                                 
    FROM ALLVALUES                           
    WHERE COLUMN NOT IN (                    
    ( select s.column from allvalues s )     
    and column not in ('G', 'H', 'I', 'J') 
    
        3
  •  0
  •   Nikhil    6 年前

        select * from table1;
        G
        H
        I
        J
    
        select * from table1
        minus
        (select * from table1
        intersect 
        select column from allvalues
        )
    sample input:
    
    select * from  ns_table10;
    G
    H
    I
    J
    SELECT * FROM ns_table11;
    A
    B
    C
    D
    E
    F
    G
    J
    I
    select * from ns_table10
    minus
    (select * from ns_table10
    intersect 
    select * from ns_table11
    );
    
    output:
    H