hive中为什么②可以执行,而①报错呢


select * from A t1
where t1.data_dt = (select max(data_dt) from B)


select * from A t1
where t1.data_dt in (select max(data_dt) from B)

在 Hive 中,子查询可以返回单个值或一组值。

  • 对于第一个SQL语句,子查询返回的是一个最大日期值,而在主查询中,使用的是等于(=)运算符,因此要求子查询返回的结果必须是单个值。但是,如果B表中有多个最大日期值,子查询返回的结果集就不是单个值,而是多个值,因此会报错。
select * from A t1
where t1.data_dt = (select max(data_dt) from B limit 1) //limit  1
  • 而对于第二个SQL语句,使用的是in运算符,可以匹配多个值,因此即使子查询返回的是多个最大日期值,也不会报错。