On this page
FROM 子句中的子查询
SELECT ... FROM (subquery) name ...
SELECT ... FROM (subquery) AS name ... (Note: Only valid starting with Hive 0.13.0)
Hive 仅在 FROM 子句中支持子查询(通过 Hive 0.12)。必须给子查询一个名称,因为 FROM 子句中的每个表都必须有一个名称。子查询选择列表中的列必须具有唯一的名称。子查询选择列表中的列在外部查询中可用,就像表的列一样。子查询也可以是带有 UNION 的查询表达式。 Hive 支持任意级别的子查询。
Hive 0.13.0 和更高版本(HIVE-6519)中的子查询名称之前可以包含可选关键字“ AS”。
简单子查询的示例:
SELECT col
FROM (
SELECT a+b AS col
FROM t1
) t2
包含 UNION ALL 的子查询的示例:
SELECT t3.col
FROM (
SELECT a+b AS col
FROM t1
UNION ALL
SELECT c+d AS col
FROM t2
) t3
WHERE 子句中的子查询
从Hive 0.13开始,WHERE 子句支持某些类型的子查询。这些查询可以将查询结果视为 IN 和 NOT IN 语句的常量(称为* unorrelated 子查询*,因为该子查询未引用父查询中的列):
SELECT *
FROM A
WHERE A.a IN (SELECT foo FROM B);
其他受支持的类型是 EXISTS 和 NOT EXISTS 子查询:
SELECT A
FROM T1
WHERE EXISTS (SELECT B FROM T2 WHERE T1.X = T2.Y)
有一些限制:
仅在表达式的右侧支持这些子查询。
IN/NOT IN 子查询只能选择一个列。
EXISTS/NOT EXISTS 必须具有一个或多个相关谓词。
仅在子查询的 WHERE 子句中支持对父查询的引用。