在HQL查询的“where”子句中动态使用表中字段的值?

时间:2016-12-20 06:57:22

标签: sql hive hiveql

是否可以动态过滤一个表,其中'where'子句在某些其他条件下作用于另一个表的字段值,以确保只返回一行?我可以这样做吗?

SELECT COUNT(*) FROM stud t1 
WHERE t1.name==SELECT name FROM (
    SELECT name, row_number() over (PARTITION BY name) AS rn
    FROM stud t2) t3
WHERE t3.rn==1; 

当然,上面的查询只是一个虚拟的查询,但是理论上可以过滤上面的where子句吗?如果不是如何在更复杂的查询的情况下实现这样的功能?

1 个答案:

答案 0 :(得分:0)

是。查询可以这样做:

SELECT COUNT(*) FROM stud t1
WHERE t1.name = (SELECT name 
                 from sometable
                 where somecondition);

但是您需要确保子查询返回零或一行。如果您的查询可能返回多行,则可以改为使用IN

SELECT COUNT(*) FROM stud t1
WHERE t1.name IN (SELECT name 
                 from sometable
                 where somecondition);