文字列 (表 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 は機能しません。
を使用できます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 句は右側のテーブルの列を参照できないことに注意してください。
まず、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