Sql 如何使用复合键加载表

Sql 如何使用复合键加载表,sql,oracle,oracle11g,Sql,Oracle,Oracle11g,我正在尝试使用SQL加载下表。在我的Ldirectory表中,我将SY和LIDENTIFIER组合作为主键,我正在尝试运行此查询 insert into S_User.LDIRECTORY (SY,LIDENTIFIER,ONAME,TELNUMBER) select 2013,D.CODE, D.NAME, D_YEAR.PHONE_NUMBER from WHS.D WHS.D_YEAR where WHS.D.D_KEY=WHS.D_YEAR.D_KE

我正在尝试使用SQL加载下表。在我的Ldirectory表中,我将
SY
LIDENTIFIER
组合作为主键,我正在尝试运行此查询

insert into S_User.LDIRECTORY (SY,LIDENTIFIER,ONAME,TELNUMBER) 
select  2013,D.CODE, D.NAME, D_YEAR.PHONE_NUMBER       
from    WHS.D   WHS.D_YEAR   
where   WHS.D.D_KEY=WHS.D_YEAR.D_KEY
我收到的错误是:

SQL Error ORA-00001 unique constraint violated

Cause:    An UPDATE or INSERT statement attempted to insert a duplicate key.
           For Trusted Oracle configured in DBMS MAC mode, you may see
           this message if a duplicate entry exists at a different level.
Action:   Either remove the unique restriction or do not insert the key.

我如何解决这个问题?我认为在插入过程中,它会将SY列本身视为主键,但该列只有一个相同的值。

错误消息应该指示违反的唯一约束的名称。假设所讨论的约束是主键,而不是表上定义的其他唯一约束,并且假设主键约束是在
SY
LIDENTIFIER
组合上定义的复合约束,这意味着您的查询返回的是重复的行

您正在运行的查询为
SY
返回硬编码值2013。因此,如果结果中有任何两行
D.code
相同,则您可能会期望违反约束。您确定希望
D.code
在整个结果集中是唯一的吗?根据对象的名称很难猜测(不知道
D
可能代表什么,不知道
D\u YEAR
为什么会有
PHONE\u NUMBER
列,等等)但我倾向于猜测
D
中的一行可能映射到
D_年的多行,在这种情况下,结果中会有多行具有相同的
D.code
值,因此违反了约束


如果您确信查询不应返回具有相同
D.code
值的任何两行,则可以使用DML错误日志记录将违反约束的行写入错误表,以便分析问题。

是否可以显示table create语句?您可能在
SY
和/或“LIDENTIFIER”(或另一列)上分别定义了唯一的约束。或者你的选择返回了重复的D.code值谢谢你的帮助谢谢你的回复Justin。实际上有一个重复的行导致了此错误。