日期:2014-05-18  浏览次数:20398 次

这个SQL问题真难
类似于表1:
a           b         c         d.......
1           3         4         1.......
1           2         5         1.......
0           2         0         2.......
0           2         0         3.......
0           3         0         3.......
.............
表有多列,多行记录

集合A:select   *   from   abc   where   a= '0 '   and   c= '0 '   and   b= '3 '

集合B:select   *   from   abc   where   a= '0 '   and   c= '0 '   and   b= '2 '
目标:修改所有集合A中b   字段数据为2
update   abc
set   b= '2 '
where     a= '0 '   and   c= '0 '   and   b= '3 '
怎么也不能修改,提示有重复记录,不能插入相同记录,明知道可能筛选出来的记录修改后可能与集合B的记录有交叉但不知道怎么改,请高手指点.
谢谢了.


------解决方案--------------------
update abc
set b= '2 '
where a= '0 ' and c= '0 ' and b= '3 '
怎么也不能修改,提示有重复记录
==========
把"主键"或是"唯一键"去掉, 然后再修改.
------解决方案--------------------
如果你把原有的b=3全部update为2,你的主键出现了重复,两种方法:要么你增加其他字段为主键,保持现有每条记录的唯一性;要么你先把现有数据导入临时表,去掉主键,合并或删掉主键重复的纪录之后导回原有表。