依旧已有表创新新表的找到了,依旧表中已有列,更新列不怎么怎么弄。
假如有一张表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
直接改主键,先增加一列辅助列updatesign,然后更新C1=ID1,updatesign=1 where C1=ID2,然后把C1="ID1",updatesign="null"的删除。
我想到思路了。谢谢。
我只想说一句,我真2。。。覆盖个屁,直接把主键,改过来,然后删除不要的那一列不就行了。。不过想的东西,还有点用,以后说不定真要依据旧行来修改字段。
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';
你的功能貌似一个语句完不成啊!
select * from a
执行语句后
@njnjnjaz: 哥们,我用的oracle。你使用的sql server?
你相应的改一下语法就可以了
@bitbug:
update a set c2 = (select c2 from a where c1 = 'ID2'),c4=(select c4 from a where c1 = 'ID2') where c1 = 'ID1'
感谢,通过子查询,测试成功。。我想说的是。句子太长。。我要改的表里面有70多个字段。我继续寻找别的解决方案。
@njnjnjaz: 什么表结构啊,这么多字段。一般库表设计的时候,除非特别情况,不然我们不允许出现横向这么长的表结构出现。
还有一种,写个存储过程,动态循环调用各个字段。不过效果跟子查询是一样的。
delete from a where c1='ID1';
update a
set c1='ID1'
where c1='ID2';