我正在尝试将一个表中的不同值插入另一个表中。我的目标表有一个主键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
帮我解决这个问题。
感谢您的时间。
答案 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
或者,如果您不想从源到目标中删除任何记录,请删除目标上的约束并插入。
希望这有帮助