You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.11 15:18:02