Ошибка SQL 10249 Hive с несколькими подзапросами - PullRequest
0 голосов
/ 15 января 2019

Я пытаюсь запустить несколько подзапросов в предложении where, и я получаю сообщение об ошибке ниже. Означает ли это, что Hive не поддерживает это? Если нет, есть ли другой способ написать запрос ниже?

Если бы я написал такой код:

SELECT * 
FROM ide_test.flights 
WHERE carrier_code IN
(
SELECT carrier_code 
FROM ide_test.flights
WHERE year >1
);

Я получу

[Ошибка 10249]: строка 6:12 Неподдерживаемое выражение SubQuery 'carrier_code': SubQuery не может использовать псевдоним таблицы: flight; это также псевдоним в Outer Query, а SubQuery содержит неквалифицированную ссылку на столбец

Если я написал так, добавьте «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 голосов
/ 15 января 2019

Вы можете сделать то же самое без подзапроса 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
;
0 голосов
/ 15 января 2019

вы можете попробовать, используя подзапрос

  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
                )
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...