求一条sql语句,急,在线等

vivachiu926 2005-08-10 02:38:15
有一个表
oldid oldmergeid customer newid newmergeid
a001 a001 wenzhou d001 d001
a002 a001 hangzhou d002 d002
...
a007 a007 shaoxing d015 d015
a013 a013 yongjia d022 d022
a014 a014 ningbo d025 d025

当oldid=oldmergeid时,表示该客户没有被合并过
当oldid<>oldmergeid时,表示该客户被其他家合并,oldmergeid标识被合并到哪个客户

newid是系统给客户新的id,要根据老的id来判断这家店时候被合并,且合并到哪家,把newmergeid
做update

比如上表中可以看出,客户hangzhou的oldmergeid为a001,说明其要被温州合并没,那么后面的
newmergeid也要被update到"001"
请问有何sql语句可以实现,因为记录实在太多了,谢谢!
...全文
76 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
冷箫轻笛 2005-08-10
  • 打赏
  • 举报
回复
update t1
set t1.newmergeid=t2.newid
from 表 t1 left join 表 t2
on t1.oldmergeid =t2.oldid
where t1.oldid <> t1.oldmergeid

--注意这里有一个问题:如果杭州被合并到温州,但是此时温州也被合并怎么办?
--该情况以上语句没有做处理
vivachiu926 2005-08-10
  • 打赏
  • 举报
回复
update表
set newmergeid=newid
where oldid<>oldmergeid

关键是这里的newid不是其本身的newid,而是根据前面的oldid,oldmergeid判断,最后更新的结果也是另一个客户的newid,比如第二行的oldmergeid即被update到的d001而不是d002

零上三度 2005-08-10
  • 打赏
  • 举报
回复
你随便用哪种语言,写如下功能的代码

//cnt是行数;
for(int i= 0 ; i< cnt ; ++i )
{
//如果oldid <> oldmergeid
// 则取oldmergeid 为_oldmergeid
// select newid,newmergeid from table where oldid = _oldmergeid
// 更新
}

如果你直接用sql server的语句,好像也可以写成这样,看看说明吧
vivachiu926 2005-08-10
  • 打赏
  • 举报
回复
oldid oldmergeid customer newid newmergeid
a001 a001 wenzhou d001 d001
a002 a001 hangzhou d002 d002
...
a007 a007 shaoxing d015 d015
a013 a013 yongjia d022 d022
a014 a014 ningbo d025 d025

当oldid=oldmergeid时,表示该客户没有被合并过
当oldid<>oldmergeid时,表示该客户被其他家合并,oldmergeid标识被合并到哪个客户

newid是系统给客户新的id,要根据老的id来判断这家店时候被合并,且合并到哪家,把newmergeid
做update

比如上表中可以看出,客户hangzhou的oldmergeid为a001,说明其要被wenzhou合并没,那么后面的
newmergeid也要被update到"001"
请问有何sql语句可以实现,因为记录实在太多了,谢谢!
WangZWang 2005-08-10
  • 打赏
  • 举报
回复
--是否要更新列newmerged??

update 表 set newmerged=newid
where oldid>oldmergeid or oldid<oldmergeid

22,209

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server 疑难问题
社区管理员
  • 疑难问题社区
  • 尘觉
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧