代码之家  ›  专栏  ›  技术社区  ›  Evgenii

如果一个原始数据包含另一个表中的任何值,则过滤值

  •  1
  • Evgenii  · 技术社区  · 9 年前

    我有表1

    c1    c2
    1   a
    1   b
    1   c
    2   a
    3   b
    

    c3
    a
    h
    y
    

    c1 即使是其中的一个 c2 包含以下任何内容: c3

    c1
    3
    

    到目前为止我试过了

    with cte as(
    select c1, collect_set(c2) as c2
    from table1
    )
    

    select c1
    from cte 
    cross join table2
    

    我可以像这样过滤RAW

    1 (a, b, c) a
    

    1 (a, b, c) x
    

    在ennd我甚至可以

    2 (a) x
    

    我根本不需要。

    我也想过要继续

    select c1, concat_ws(',', c2)
    

    like '%c3%' 但是 是一个具有多个值而不是一些字符串的列。

    NOT EXISTS 也不行

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

    我想你想要这样的东西:

    select t1.c1
    from table1 t1 left join
         table2 t2
         on t1.c2 = t2.c3
    group by t1.c1
    having count(t2.c3) = 0;
    
        2
  •  -1
  •   Chester Lim    9 年前

    SELECT  [c1]
    FROM    @table1
    WHERE   [c1] NOT IN ( SELECT    [c1]
                          FROM      @table1
                                    INNER JOIN @table2 ON c2 = c3 );