我有包含以下数据的表格 (此处关键字段包含site__marker)
id userid key value
1 1 site_1_name http://example1.com
2 1 site_1_user user1
3 1 site_2_name http://example2.com
4 2 site_1_name http://example3.com
5 2 site_1_user user2
我有站点映射表
oldsiteid newsiteid
1 120
2 152
现在,我需要更新第一个表,只更新关键字段中的更新 应匹配第二个表中的oldsiteid,并应由newsiteid
更新输出应该像
id userid key value
1 1 site_120_name http://example1.com
2 1 site_120_user user1
3 1 site_152_name http://example2.com
4 2 site_120_name http://example3.com
5 2 site_120_user user2
如何实现这一目标?
答案 0 :(得分:0)
你必须在SQL中翻译这个REXX,这些功能是明确的:
old = 'user_1_ddd'
n = "333"
new = substr(a,1,index(a,"_")) || n || substr(a,index(a,"_") + index(substr(a, index(a,"_")+1) ,"_"))
结果是user_333_ddd
substr在两者中都是相同的
索引,请使用Find_in_set
for ||使用concat
答案 1 :(得分:0)
我没有MySQL,但这应该有效:
UPDATE TargetTable
SET key = CONCAT
(
SUBSTRING_INDEX(key,'_',1)
,'_'
, (SELECT newsiteid FROM MappingTable WHERE MappingTable.oldsiteid = SUBSTRING_INDEX(SUBSTRING_INDEX(TargetTable.key,'_',-2), '_', 1 ))
,'_'
,SUBSTRING_INDEX(key,'_',-1)
)