SQL错误10249:Hive多个子查询

3

我试图在 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':子查询不能使用表别名:flights;这也是外部查询中的一个别名,并且子查询包含未限定的列引用

如果我像这样写,除了子查询或外部查询表的名称后面加上“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
);

然后它就工作了

3个回答

0

看起来Hive SQL解析器无法识别相同表IN / NOT IN子句,除非使用表别名。


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
                )

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
;

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接