【问题标题】:Hive non-equi Join on OR conditionHive non-equi Join on OR 条件
【发布时间】:2021-07-09 16:15:52
【问题描述】:

我有两个表要加入 3 个键。但是,其中一个键可能包含另一个表中不存在的值,但我仍然希望在查询时保留这些记录。

与此类似,first_table 中的 key_3 可能包含 second_table 中不存在的值 0。

SELECT
  f.key_1,
  f.key_2,
  f.key_3,
  s.column_4
FROM 
  first_table f
  LEFT OUTER JOIN second_table s
    ON f.key_1 = s.key_1
    AND f.key_2 = s.key_2
    AND (f.key_3 = s.key_3 OR f.key_3 = 0)

当我运行它时,我得到一个错误 OR not supported in JOIN current '0'。我知道在 Hive 的较新版本中这是允许的,但在旧版本中是否有解决方法。

【问题讨论】:

    标签: sql hive hiveql


    【解决方案1】:

    将带有 OR 的条件移至 WHERE 子句:

    SELECT
      f.key_1,
      f.key_2,
      f.key_3,
      s.column_4
    FROM 
      first_table f
      LEFT OUTER JOIN second_table s
        ON f.key_1 = s.key_1
        AND f.key_2 = s.key_2
    WHERE f.key_3 = s.key_3 
       OR f.key_3 = 0
       OR s.key_1 is NULL --allow not joined records
    

    【讨论】:

      【解决方案2】:

      我可能不完全理解你的问题,但是一个简单的left join 不就是你想要的吗?

      SELECT f.key_1, f.key_2, f.key_3, s.column_4
      FROM first_table f LEFT OUTER JOIN
           second_table s
            ON f.key_1 = s.key_1 AND
               f.key_2 = s.key_2 AND
               f.key_3 = s.key_3 ;
      

      如果第二个表中没有匹配项(无论第一个表中的值如何),仍会返回第一个表中的行。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2017-04-07
        • 1970-01-01
        相关资源
        最近更新 更多