什么是NOT IN的HQL等价物?

时间:2012-05-02 04:25:06

标签: sql hql hive

我正在尝试在Hive查询语言中使用NOT IN关键字。这似乎给了我一个错误:

SELECT Name
FROM names_in_countries
WHERE Country = 'Mexico'
AND Name NOT IN (
    SELECT Name
    FROM names_in_countries
    WHERE Country <> 'Mexico')

Here is the original question with answer in SQL.

2 个答案:

答案 0 :(得分:2)

我不知道Hive查询语言。根据我在此处阅读的内容:Hive Queries on Tables,以下脚本可能有效。试一试。

脚本

SELECT      name
FROM        mytable
GROUP BY    name
HAVING      AVG((CASE WHEN country = 'Mexico' THEN 1 ELSE 0 END) * 1.) >= 1

答案 1 :(得分:1)

这样的事可能有用。

SELECT t1.Name 
FROM   names_in_countries t1 
       LEFT OUTER JOIN (SELECT Name, 
                               Country 
                        FROM   names_in_countries 
                        WHERE  Country <> 'Mexico') t2 
         ON ( t1.Name = t2.Name ) 
WHERE  t1.Country = 'Mexico' 
       AND t2.Country IS NULL 

在t2上添加country <> 'Mexico'作为子选择是至关重要的,因为从执行LEFT OUTER JOIN后从t2检索的记录会发生变化。如果没有来自t1的记录的相应条目,它们将显示为NULL。