我只是想了解连接两个具有OR条件的表的概念。 我的要求是:我需要在Table1.colA = Table2.colB列上联接2个表Table1 [colA,colB]和Table2 [colX,colY],但是如果colA为NULL,则条件应为Table1.colB = Table2.colY。< / p>
我需要分别加入他们,然后加入工会吗?还是有一种方法可以一次加入?请注意,我在两个表中都有数百万条记录,它的左联接和表都位于HIVE中。我没有可复制的示例,只是试图理解这个概念。
答案 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)
通常,or
是join
年代的性能杀手。这个想法通常用两个单独的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;