使用来自另一个表的匹配id更新字段的一部分

时间:2011-09-22 05:35:10

标签: mysql sql

我有包含以下数据的表格 (此处关键字段包含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

如何实现这一目标?

2 个答案:

答案 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) 
    )