在具有OR条件的2个表之间进行SQL连接

时间:2019-11-05 15:09:32

标签: sql hive hiveql

我只是想了解连接两个具有OR条件的表的概念。 我的要求是:我需要在Table1.colA = Table2.colB列上联接2个表Table1 [colA,colB]和Table2 [colX,colY],但是如果colA为NULL,则条件应为Table1.colB = Table2.colY。< / p>

我需要分别加入他们,然后加入工会吗?还是有一种方法可以一次加入?请注意,我在两个表中都有数百万条记录,它的左联接和表都位于HIVE中。我没有可复制的示例,只是试图理解这个概念。

2 个答案:

答案 0 :(得分:2)

虽然我不熟悉HiveQL,但在SQL Server中,可以通过以下方式实现:

SELECT *
FROM   table1 t1
       JOIN table2 t2
         ON COALESCE(t1.cola, t1.colb) = CASE
                                           WHEN t1.cola IS NULL THEN t2.coly
                                           ELSE t2.colx
                                         END  

逻辑应该相当可读。

答案 1 :(得分:0)

直接翻译您的条件:

SELECT *
FROM table1 t1 JOIN
     table2 t2
     ON (t1.cola = t2.colb) or
        (t1.cola is null and t1.colb = t2.coly)

通常,orjoin年代的性能杀手。这个想法通常用两个单独的left join来表达:

SELECT . . . , COALESCE(t2a.col, t2b.col) as col
FROM table1 t1 LEFT JOIN
     table2 t2a
     ON (t1.cola = t2.colb) LEFT JOIN
     table2 t2b
     ON t1.cola is null and t1.colb = t2.coly;