0

我正在尝试加入 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 不起作用。

4

2 回答 2

-1

首先,除非 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
于 2013-11-02T05:32:32.170 回答
-1

您可以使用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 子句不能引用右侧表中的列。

于 2013-11-06T10:46:23.803 回答