我正在尝试加入 Hive QL 中的字符串列表(表 2 中的列)中是否存在字符串(表 1 中的列)。谁能帮我语法。
SELECT
A.id
FROM tab1 A
inner join tab2 B
ON (
(array_contains(B.purchase_items, A.item_id) = true )
)
上面的 SQL 不起作用。
首先,除非 Hive QL 是向后的,否则您的查询是错误的:
SELECT A.ID FROM A tab1
将不返回任何内容,因为您已将表“A”声明为“tab1”。反转别名或更正表别名引用:(我假设 tab1 是表名,所以选择选项 1)
SELECT A.ID from tab1 A
--OR
SELECT tab1.id from A tab1
其次,连接不能基于条件标准工作,它们是条件标准。有点...
例如:
SELECT A.ID
FROM tab1 A
INNER JOIN tab2 B
ON A.item_id = B.purchase_item
几乎就像用 WHERE 条件做一个简单的交叉连接:
SELECT A.ID
FROM tab1 A, tab2 B --better to use it straight as "FROM tab1 A cross join tab2 B"
WHERE a.item_id = b.purchase_item
您可以使用LEFT SEMI JOIN
,它将从左侧表中检索与右侧表匹配的列的行。
SELECT A.id FROM tab1 A
LEFT SEMI JOIN tab2 B
ON A.col1 = B.col1 AND <any-other-join-cond>;
请注意,SELECT 和 WHERE 子句不能引用右侧表中的列。