Я новичок во всей этой теме SQL и не могу понять, как решить мою проблему. Моя таблица выглядит так, первичный ключ - (id, name):

| bid |   name   |   value    |
|=====|==========|============|
|  1  | filename | foo        |
|  1  | mime     | text/plain |
|  2  | filename | bar        |
|  2  | mime     | image/png  |

Теперь я хочу обновить каждое имя, чтобы оно содержало суффикс, соответствующий типу mime, чтобы в итоге оно выглядело так:

| bid |   name   |   value    |
|=====|==========|============|
|  1  | filename | foo.txt    |
|  1  | mime     | text/plain |
|  2  | filename | bar.png    |
|  2  | mime     | image/png  |

У меня есть сценарий, который получает ассоциацию суффикса mime <-> из /etc/mime.type, чтобы эта часть была покрыта. Однако я не могу, хоть убей, построить правильный запрос на обновление SQL.

Любая помощь будет очень высоко ценится! Извините, если это дубликат, я не совсем понял, о чем просить.

1
Mirodin 10 Окт 2020 в 17:21

1 ответ

Лучший ответ

Хм . . . Вы можете использовать коррелированный подзапрос:

update t
    set value = (value ||
                 (select (case when t2.value = 'text/plain' then '.txt'
                               when t2.value = 'image/png' then '.png'
                               else ''
                          end)
                  from t t2
                  where t2.id = t.id and 
                        t2.name = 'mime'
                 )
                )
    where name = 'filename';
1
Gordon Linoff 10 Окт 2020 в 14:25