多应用+插件架构,代码干净,二开方便,首家独创一键云编译技术,文档视频完善,免费商用码云13.8K 广告
在hive中,`union`和`union all`都是对两个子查询的结果合并,不过还是有区别的。 * `union`会对两个子查询的结果去重合并,Hive v1.2+版本支持; * `union all`不会对子查询结果去重处理。 ```sql select * from left_tbl lt left semi join right_tbl rt on lt.id=rt.id; +--------+----------+---------+--+ | lt.id | lt.name | lt.age | +--------+----------+---------+--+ | 1 | 张三 | 20 | | 2 | 李四 | 22 | +--------+----------+---------+--+ select * from left_tbl lt where lt.id in(select id from right_tbl); +--------+----------+---------+--+ | lt.id | lt.name | lt.age | +--------+----------+---------+--+ | 1 | 张三 | 20 | | 2 | 李四 | 22 | +--------+----------+---------+--+ -- union 合并后并去重 select * from left_tbl union select * from right_tbl; +---------+-----------+----------+--+ | _u1.id | _u1.name | _u1.age | +---------+-----------+----------+--+ | 1 | 张三 | 20 | | 2 | 李四 | 22 | | 3 | 王五 | 25 | | 4 | 王五 | 25 | +---------+-----------+----------+--+ -- union all 合并后没有去重 select * from left_tbl union all select * from right_tbl; +---------+-----------+----------+--+ | _u1.id | _u1.name | _u1.age | +---------+-----------+----------+--+ | 1 | 张三 | 20 | | 2 | 李四 | 22 | | 3 | 王五 | 25 | | 1 | 张三 | 20 | | 2 | 李四 | 22 | | 4 | 王五 | 25 | +---------+-----------+----------+--+ ``` <br/> **`union`与`union all`的使用条件(A `union all` B):** (1)A表和B表的列数必须一样多; (2)B表的列名必须与A表的列名一一对应,如果是 B `union all` A 则反过来; (3)不需要列的数据类型一致;