0

文字列 (表 1 の列) が Hive QL の文字列のリスト (表 2 の列) に存在するかどうかを結合しようとしています。誰でも構文を教えてください。

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

を使用できます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 に答える
-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 に答える