我想将一个表中的信息用作另一查询的输入。
查询(必填输出)
SELECT * from maintable where year in ('2005','2006','2007','2008');
我在单独的表格中列出了这些年份。附图片。 此查询给我错误:
SELECT * from maintable where year in (SELECT * from picture_table) sub_data;
我们非常感谢您的帮助。预先感谢。
答案 0 :(得分:1)
您忘记为maintable
指定别名:
SELECT * from maintable a where a.year in (SELECT year from picture_table);
答案 1 :(得分:1)
有两种方法可以在Hive中实现。
IN
子句:
如果图片表具有唯一年份,则您无需在内部查询中使用DISTINCT
。 SELECT * FROM maintable a where a.year IN (SELECT year FROM picture_table);
如果year
列在picture_tale
中不是唯一的,请使用DISTINCT
关键字:
SELECT * FROM maintable a where a.year IN (SELECT DISTINCT year FROM picture);
WHERE EXISTS
子句: SELECT * FROM maintable a WHERE EXISTS (SELECT 1 FROM picture_table b WHERE a.year = b.year);
JOIN
: SELECT a.* FROM maintable a INNER JOIN picture_table b ON (a.year = b.year) WHERE b.year IS NOT NULL;
使用IN
子句和joins
的优点是,如果任何一个表都足够小,可以缓存到分布式缓存中,则该查询将被提升为map join
(如果属性hive.auto.convert.join=true
)。
希望这会有所帮助。