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

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

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

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

虽然我不熟悉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  

逻辑应该相当可读。

,

直接翻译您的条件:

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;
本文链接:https://www.f2er.com/3158524.html

大家都在问