обновить часть поля, используя соответствующий идентификатор из другой таблицы - PullRequest
0 голосов
/ 22 сентября 2011

У меня есть таблица со следующими данными (здесь ключевое поле состоит из 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 голосов
/ 22 сентября 2011

У меня нет 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) 
    )
0 голосов
/ 22 сентября 2011

Вам нужно будет перевести этот REXX в SQL, функции просты:

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

для ||используйте concat

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...