SQL错误10249具有多个子查询的配置单元

时间:2019-01-15 06:33:35

标签: sql hive hiveql

我试图在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
);

然后它起作用了

2 个答案:

答案 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
;