0

我正在尝试将一个表中的不同值插入到另一个表中。我的目标表有一个主键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 

帮我解决这个问题。

谢谢你的时间。

4

1 回答 1

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

或者,如果您不想从源到目标丢失任何记录,则删除对目标的约束并将其插入。

希望这可以帮助

于 2012-12-29T12:26:43.173 回答