左半开连接(LEFT SEMI 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