我试图在where子句中运行多个子查询,但出现以下错误。这是否意味着Hive不支持它?如果不是,是否有其他方法可以在下面编写查询?
如果我写这样的代码:
SELECT *
FROM ide_test.flights
WHERE carrier_code IN
(
SELECT carrier_code
FROM ide_test.flights
WHERE year >1
);
我会得到
[错误10249]:行6:12不支持的子查询表达式'carrier_code':子查询不能使用表别名:flight;这也是外部查询中的别名,子查询中包含不合格的列引用
如果我这样写,请在子查询或外部查询表的名称旁边添加一个“ s”:
SELECT *
FROM ide_test.flights
WHERE carrier_code IN
(
SELECT carrier_code
FROM ide_test.flights s
WHERE year >1
);
or
SELECT *
FROM ide_test.flights s
WHERE carrier_code IN
(
SELECT carrier_code
FROM ide_test.flights
WHERE year >1
);
然后它起作用了
答案 0 :(得分:0)
您可以尝试使用相关的子查询
SELECT a.*
FROM ide_test.flights a
where exists (SELECT 1
FROM ide_test.flights a1
WHERE a1.carrier_code=a.carrier_code
and carrier_code <>1
)
答案 1 :(得分:0)
您可以使用分析功能在不使用IN子查询的情况下执行相同的操作,此查询仅扫描表一次:
select s.* --list columns here
from
(
select f.*,
count(case when year >1 then 1 end) over(partition by carrier_code) cnt
from ide_test.flights f
)s
where cnt>=1
;