oracle唯一约束

时间:2012-12-29 12:20:26

标签: sql database oracle11g

我正在尝试将一个表中的不同值插入另一个表中。我的目标表有一个主键studentid,当我从源到目标执行不同的id时,加载成功。当我尝试将一堆列从源加载到目标(包括student_id)时,我收到错误唯一约束违反。目标上只有一个约束,它是studentid上的主键。

我的查询看起来像这样(只是一个例子)

insert into target(studentid, age, schoolyear)
  select distinct id, age, 2012 from source 

为什么上面的查询返回错误,因为下面的查询完全正常

insert into target(studentid)
  select distinct id from source 

帮我解决这个问题。

感谢您的时间。

1 个答案:

答案 0 :(得分:2)

第一个查询中,您选择的是三列的不同组合,即

select distinct id, age, 2012 from source

不仅仅是独特的身份证明。在这种情况下,存在重复ID的可能性。 例如,您的上述查询对此

有效
id age
1   23
1   24
1   25
2   23
3   23

但是在第二个查询中,您只选择了不同的ID

select distinct id from source

所以这将返回,

id
1
2
3

在这种情况下,没有办法重复,你的插入目标也不会 失败。

如果你真的想在目标上使用约束进行批量插入,那就去吧 任何集合函数

select id, max(age), max(2012) group by id from source

或者,如果您不想从源到目标中删除任何记录,请删除目标上的约束并插入。

希望这有帮助