【发布时间】:2019-12-25 00:45:21
【问题描述】:
我有 2 个表格,如下所示。
表_A
ID1 ID2 NAME
112 NULL ADAM
132 990 BRIAN
NULL 980 CARL
表_B
ID1 ID2 SURNAME
112 NULL LEVINE
132 990 LARA
NULL 980 JOHNSON
如果我按如下方式加入表格,则空比较将不起作用,因此不会返回 ADAM 的姓氏
SELECT A.NAME,B.SURNAME
FROM
TABLE_A A
LEFT JOIN
TABLE_B B
ON A.ID1 = B.ID1
AND
A.ID2 = B.ID2;
我在 ID2 的 ON 子句中添加了对 NULL 的检查,这确实有效,但结果证明即使是小型表,该操作的成本也很高。 (见下文)
SELECT A.NAME,B.SURNAME
FROM
TABLE_A A
LEFT JOIN
TABLE_B B
ON
(A.ID1 = B.ID1 OR (A.ID1 IS NULL AND B.ID1 IS NULL))
AND
(A.ID2 = B.ID2 OR (A.ID2 IS NULL AND B.ID2 IS NULL));
进行这种比较的正确方法是什么?
【问题讨论】:
-
尝试使用
COALESCE作为ID字段来改变NULL的非空值:ON COALESCE(A.ID1, '_NULL_') = COALESCE(B.ID1, '_NULL_') AND ...
标签: join hive left-join hiveql