首页 新闻 会员 周边

sql-分组更新

0
悬赏园豆:50 [待解决问题]

现在有一个需求,811开头的机构,district字段都需要更新成811002这个机构的district字段。
数据如 :
id district
811001 null
811002 111111
811003 null
822001 null
822002 222222
822003 null
822004 null
...

sql
问题补充:

不止811开头的数据,还有812,813....只是这样的一个规则。

鹧鸪清怨的主页 鹧鸪清怨 | 初学一级 | 园豆:152
提问于:2021-12-27 15:05
< >
分享
所有回答(1)
0

update 表
set district = (select district from 表 where id = '811002')
where id >= 811000 and id <= 811999

Tom.汤 | 园豆:3028 (老鸟四级) | 2021-12-27 15:48

811xxx举例只是一个规则,还有812xxx,813xxx等几十个机构,能不能一条sql就更新完?

支持(0) 反对(0) 鹧鸪清怨 | 园豆:152 (初学一级) | 2021-12-27 16:45

@鹧鸪清怨:

update a
set a.district = b.district
from a
join (select left(convert(varchar(10),id),3) as idpre, district
from 表
where right (convert(varchar(10),id),3) = '002'
) b on left(convert(varchar(10),a.id),3) = b.idpre

支持(1) 反对(0) Tom.汤 | 园豆:3028 (老鸟四级) | 2021-12-27 16:57

@Tom.汤: 刚了解了一下update set from,发现这是sqlserver的语法,觉得这语法也挺好用的,但是在MySQL上不行。
自己慢慢摸索,写了一下,写的比较low但是能用:UPDATE retail a set a.district = (SELECT b.district from (SELECT LEFT(id,3) bid,district from retail where RIGHT(id,3)='002') b where b.bid =LEFT(a.id,3) )

支持(1) 反对(0) 鹧鸪清怨 | 园豆:152 (初学一级) | 2021-12-28 20:27
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册