如何将下述使用UNION的SQL查询结果保存到永久表中
把UNION查询结果保存为永久表的实现方法
方法1:CREATE TABLE AS SELECT(兼容MySQL/PostgreSQL/Oracle/Hive等绝大多数数据库)
直接在你的查询外层套建表语句即可,示例代码:
CREATE TABLE 你的目标表名 AS SELECT * from DATA_2018 UNION SELECT * from DATA_2019 UNION SELECT * from DATA_2020;
注意:该语法要求目标表不存在,若目标表已存在会抛出冲突错误。
方法2:SELECT INTO(适配SQL Server/Access等数据库)
如果用的是SQL Server体系的数据库,可以用下面的写法:
SELECT * INTO 你的目标表名 FROM ( SELECT * from DATA_2018 UNION SELECT * from DATA_2019 UNION SELECT * from DATA_2020 ) AS union_result;
方法3:写入已存在的结构匹配的表
如果你已经预先建好结构完全匹配的目标表,直接用INSERT INTO写入即可,所有数据库通用:
INSERT INTO 你的目标表名 SELECT * from DATA_2018 UNION SELECT * from DATA_2019 UNION SELECT * from DATA_2020;
注意事项
- 所有参与UNION的表必须保证字段数量、字段顺序、对应字段的数据类型完全一致,否则会执行报错
- 如果不需要对结果去重,建议把
UNION换成UNION ALL,可以大幅提升查询执行效率 - 正式执行前建议先给查询加LIMIT限制(比如
LIMIT 10)验证结果符合预期,再全量执行写入
内容的提问来源于stack exchange,提问作者Alok Ranjan
相关产品推荐
相关产品推荐

