Sybase:使用不同的ID复制回同一个表

时间:2012-12-30 12:00:04

标签: sql select insert sybase

我有一个表格,我希望将一些数据复制回同一个表,其中两列发生了变化:

e.g:

TableMusic

titleid   musicid  tap_id            value

1234         1      3                 this is music
1324         1      3                 this is music test

我想将titleid和值写回到musicid = 3

的同一个表中

此处索引列为titleid,musicid

我已完成以下脚本但出现错误:尝试在对象'tablemusic'中插入重复的键行,并使用唯一索引'pk_tablemusic'

insert into tablemusic (titleid, musicid, value )
  select titleid, 3, value
  from tablemusic
  where musicid=1

我在这里做错了什么?有人可以提出一个干净的脚本来完成工作。

以下是我的数据库提取的一个titleID:

titleid   musicid    tap_id              value

462847        1        3               this is my music value 
462847        2        1    
462847        3        1    
462847        4        1     

所有titleid都是一样的。现在我要做的是将值从musicid = 1复制到musicid = 3,并且有时将tap_id更改为3.我希望这对我想要实现的内容足够清楚

最终结果希望实现:

titleid musicid tap_id value

462847        1        3               
462847        2        1    
462847        3        3               this is my music value 
462847        4        1     

2 个答案:

答案 0 :(得分:0)

复杂性是存在一些记录,因此尝试简单的插入会复制密钥并导致错误。你在这里要做的是将查询分解为两个prts

  1. 使用musicid = 3更新存在的行
  2. 插入音乐ID = 3不存在的行

答案 1 :(得分:0)

这是基于马克回答的脚本,但有一些更改。谢谢MARK - 你是我的英雄。

首先我运行了这个脚本:

从tablemusic中删除musicid = 3

在上面之后我运行了以下脚本:

插入tablemusic(titleid,musicid,tap_id,value)   选择titleid,3,3,值    来自tablemusic
    musicid = 1

这给了我想要实现的结果,如上面的问题所示。