DBeaver中如何将Union查询结果插入指定列的新表?
问题分析与修正方案
你的SQL存在两个核心问题:
- 语法格式错误:
INSERT语句的正确结构是先指定目标表和列,再通过SELECT获取数据,而非直接把列写在INSERT后。 - 表连接方式错误:用逗号直接拼接多个表会生成笛卡尔积(所有表数据的交叉组合),这完全不是你要的合并表数据的效果。
正确SQL写法
直接将UNION ALL合并后的各表指定列数据,作为插入normal表的数据源即可:
INSERT INTO normal (geom, ccn, report_dat, shift, "method", offense, ward, district, latitude, longitude, start_date, end_date) SELECT geom, ccn, report_dat, shift, "method", offense, ward, district, latitude, longitude, start_date, end_date FROM c UNION ALL SELECT geom, ccn, report_dat, shift, "method", offense, ward, district, latitude, longitude, start_date, end_date FROM c2 UNION ALL SELECT geom, ccn, report_dat, shift, "method", offense, ward, district, latitude, longitude, start_date, end_date FROM c3 UNION ALL SELECT geom, ccn, report_dat, shift, "method", offense, ward, district, latitude, longitude, start_date, end_date FROM c4 UNION ALL SELECT geom, ccn, report_dat, shift, "method", offense, ward, district, latitude, longitude, start_date, end_date FROM c5 UNION ALL SELECT geom, ccn, report_dat, shift, "method", offense, ward, district, latitude, longitude, start_date, end_date FROM c6;
关键说明
- 若不需要去除各表间的重复数据,用
UNION ALL效率更高;如果需要去重,将UNION ALL替换为UNION即可。 - 确保所有源表的目标列数据类型、顺序,与
normal表的对应列完全匹配,否则会插入失败。 "method"用双引号是因为它是SQL关键字,保持该写法可避免语法错误。
内容的提问来源于stack exchange,提问作者Cford
相关产品推荐
相关产品推荐

