Oracle多表关联插入数据报ORA-01747错误解决方案咨询
- 报错
ORA-01747的核心原因是UNIQUE关键字的使用语法错误:UNIQUE/DISTINCT是作用于查询结果整行去重的关键字,需要放在SELECT之后,不能写在表别名和字段名之间。
-- 修正后的查询语句 SELECT DISTINCT a.city, b.country_id FROM airportdemodata a INNER JOIN country b ON a.country = b.country;
完整插入语句实现需求
场景1:已为city表的city_id创建自增序列(推荐方案)
假设你创建的序列名为seq_city_id,执行以下语句插入即可:
INSERT INTO city (city_id, country_id, city) SELECT seq_city_id.nextval, b.country_id, a.city FROM ( -- 先对原始数据的城市+国家去重,避免重复插入同一国家的同名城市 SELECT DISTINCT city, country FROM airportdemodata ) a INNER JOIN country b ON a.country = b.country;
场景2:未创建city_id自增序列(临时实现方案)
可以用ROWNUM临时生成唯一主键:
INSERT INTO city (city_id, country_id, city) SELECT ROWNUM, b.country_id, a.city FROM ( SELECT DISTINCT city, country FROM airportdemodata ) a INNER JOIN country b ON a.country = b.country;
补充说明
- 插入完成后可以执行
SELECT COUNT(*) FROM city和SELECT COUNT(DISTINCT city||','||country) FROM airportdemodata对比结果,校验数据是否完整插入。 - 推荐使用显式
JOIN语法替代旧式的逗号连接,SQL可读性和可维护性更高。
内容的提问来源于stack exchange,提问作者user230
相关产品推荐
相关产品推荐

