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

如何删除T1表中与带唯一约束的T2表重复的数据?解决ORA-00001错误

解决ORA-00001约束冲突:删除T1中与T2重复的行

针对你遇到的ORA-00001唯一约束冲突问题,本质是T1中存在部分行的SCHEDULEID(对应唯一约束PK_SJSI_SCHEDULEID的列)已在T2表中存在,导致数据复制失败。以下是几种直接删除T1中这些重复行的方法:

方法1:使用DELETE + EXISTS子查询

这是最直观的匹配方式,精准定位需删除的行:

DELETE FROM T1
WHERE EXISTS (
    SELECT 1
    FROM T2
    WHERE T2.SCHEDULEID = T1.SCHEDULEID
);
  • 逻辑:通过子查询找出T1中所有与T2拥有相同SCHEDULEID的行,批量删除。

方法2:使用DELETE + IN子查询

如果唯一约束是单列主键,也可以用IN子查询简化写法:

DELETE FROM T1
WHERE SCHEDULEID IN (
    SELECT SCHEDULEID
    FROM T2
);
  • 注意:若PK_SJSI_SCHEDULEID是复合主键,这种方式不适用,需改用EXISTS子查询匹配所有主键列。

方法3:使用MERGE语句(适合复杂批量操作)

如果需要在删除前附加其他逻辑(比如记录待删行),可以用MERGE实现:

MERGE INTO T1
USING T2
ON (T1.SCHEDULEID = T2.SCHEDULEID)
WHEN MATCHED THEN DELETE;

关键注意事项

  • 先备份数据:执行删除前建议导出待删行备份,避免误操作:
    CREATE TABLE T1_BACKUP AS SELECT * FROM T1 WHERE EXISTS (SELECT 1 FROM T2 WHERE T2.SCHEDULEID = T1.SCHEDULEID);
    
  • 验证删除范围:先运行SELECT语句确认待删行是否正确:
    SELECT * FROM T1 WHERE EXISTS (SELECT 1 FROM T2 WHERE T2.SCHEDULEID = T1.SCHEDULEID);
    
  • 优化性能:如果两张表数据量较大,确保SCHEDULEID列有索引,避免全表拖慢操作速度。

内容的提问来源于stack exchange,提问作者Nandu

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.11 17:01:10