首页 新闻 会员 周边 捐助

新人求助一条sql语句。根据已有的一条记录更新另外一条记录。

0
悬赏园豆:15 [已解决问题] 解决于 2013-12-10 17:34

依旧已有表创新新表的找到了,依旧表中已有列,更新列不怎么怎么弄。

假如有一张表a

c1    c2 c3 c4 c5 c6 c7 c8 

ID1   b  c   3   e   4   g h

ID2   b  c   d   e   f   g  h

ID3   w  c   1   e  1   g  h

ID4   Z  7   e   8  g   h  i

C1列是主键,现在需要把ID2这条记录除主键外覆盖ID1,然后ID2一条。最后结果

c1    c2 c3 c4 c5 c6 c7 c8 

ID1   b  c   d   e   f   g  h

ID2   b  c   d   e   f   g  h

ID3   w  c   1   e  1   g  h

ID4   Z  7   e   8  g   h  i    

(覆盖然后删除ID2) 

c1    c2 c3 c4 c5 c6 c7 c8 

ID1   b  c   d   e   f   g  h

ID3   w  c   1   e  1   g  h

ID4   Z  7   e   8  g   h  i  

sql
深圳-光头佬的主页 深圳-光头佬 | 初学一级 | 园豆:107
提问于:2013-12-10 16:03
< >
分享
最佳答案
0

直接改主键,先增加一列辅助列updatesign,然后更新C1=ID1,updatesign=1 where C1=ID2,然后把C1="ID1",updatesign="null"的删除。

收获园豆:4
happydaily | 菜鸟二级 |园豆:260 | 2013-12-10 17:21

我想到思路了。谢谢。

深圳-光头佬 | 园豆:107 (初学一级) | 2013-12-10 17:32

我只想说一句,我真2。。。覆盖个屁,直接把主键,改过来,然后删除不要的那一列不就行了。。不过想的东西,还有点用,以后说不定真要依据旧行来修改字段。

深圳-光头佬 | 园豆:107 (初学一级) | 2013-12-10 17:36
其他回答(2)
0

update  a set (c2,c3,c4,c5,c6,c7,c8) = (select c2,c3,c4,c5,c6,c7,c8 from a where c1 = 'ID2')

where c1 = 'ID1';

delete from a where c1 = 'ID2';

 

你的功能貌似一个语句完不成啊!

收获园豆:7
bitbug | 园豆:470 (菜鸟二级) | 2013-12-10 16:19

select * from a

执行语句后

支持(0) 反对(0) 深圳-光头佬 | 园豆:107 (初学一级) | 2013-12-10 16:28

@njnjnjaz: 哥们,我用的oracle。你使用的sql server?  

你相应的改一下语法就可以了

支持(0) 反对(0) bitbug | 园豆:470 (菜鸟二级) | 2013-12-10 16:36

@bitbug: 

update a set c2 = (select c2 from a where c1 = 'ID2'),c4=(select c4 from a where c1 = 'ID2') 
where c1 = 'ID1'

感谢,通过子查询,测试成功。。我想说的是。句子太长。。我要改的表里面有70多个字段。我继续寻找别的解决方案。

支持(0) 反对(0) 深圳-光头佬 | 园豆:107 (初学一级) | 2013-12-10 16:47

@njnjnjaz: 什么表结构啊,这么多字段。一般库表设计的时候,除非特别情况,不然我们不允许出现横向这么长的表结构出现。

还有一种,写个存储过程,动态循环调用各个字段。不过效果跟子查询是一样的。

支持(0) 反对(0) bitbug | 园豆:470 (菜鸟二级) | 2013-12-10 17:05
0

delete from a where c1='ID1';

update a
set c1='ID1'
where c1='ID2';

收获园豆:4
Albert Fei | 园豆:2102 (老鸟四级) | 2013-12-10 17:24
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册