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

oracle(+)运算符,其中带有>(更多)或<(更少)

  •  0
  • Evgenii  · 技术社区  · 8 年前

    我读过,知道在这种情况下它是如何工作的

    select a.id
    from a, b
    where a.id = b.id(+)
    

    但是这个呢?

    select a.id
    from a, b
    where a.id = b.id2(+) and a.id > b.id(+)
    

    这与

    select a.id
    from a
    left outer join b
    on a.id = b.id2 
    where a.id > b.id
    

    我该如何改变它? 我需要将其重写到hive,但hive不支持

    on a.id = b.id and a.id > b.id;
    
    1 回复  |  直到 8 年前
        1
  •  0
  •   Gordon Linoff    8 年前

    虽然不完全相同(存在一些边缘情况),但这可能会满足您的需要:

    select a.id
    from a left outer join
         b
         on a.id = b.id2 
    where (a.id > b.id or b.id2 is null);
    

    然而,你的表情只是 id 从…起 a 它正在使用 left join . 因此,这可能已经足够好了:

    select a.id
    from a ;
    

    诚然,它不会将匹配生成的副本返回给 b 表,但通常不需要重复。