LEFTSEMI JOIN左半開接続

2222 ワード

左半開接続(LEFTSEMI JOIN)は、右のテーブルについてON文の判定条件を満たすことを前提として、左のテーブルのレコードを返します.一般的なイントラコネクション(INNER JOIN)にとって、これは特殊で、最適化された場合です.ほとんどのSQL方言はIN...EXISTS構造で処理されます.例えば、以下に示すクエリは、限定配当金支払日内の株式取引記録を戻そうとするが、このクエリHiveはサポートされていない.
-- HIVE       
SELECT s.ymd,s.symbol.s.price_close FROM stocks s
WHERE s.ymd,s.symbol IN
(SELECT d.ymd,d.symbol FROM dividends d);

ただし、ユーザーは以下のLEFT SEMI JOIN構文を使用して同じ目的を達成することができます.
SELECT s.ymd,s.symbol,s.price_close
FROM stocks s LEFT SEMI JOIN dividends d ON s.ymd = d.ymd AND s.symbol = d.symbol;

  SELECT文およびWHERE文では右の表のフィールドには参照できません.
Hiveは右半開接続をサポートしていません(RIGHT SEMI JOIN)
  LEFT SEMI JOINは通常のINNER JOINよりも効率的です.左の表に指定されたレコードがある場合、右の表に一致するレコードが見つかったら、Hiveはすぐにスキャンを停止します.