如何基于同一表中的另一列更新列

时间:2020-10-10 14:21:49

标签: sql sqlite

对于这整个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  |

我有一个脚本,它从/etc/mime.type获取mime <->后缀关联,以便覆盖该部分。但是我无法终生构造正确的SQL更新查询。

任何帮助将不胜感激!抱歉,如果这是重复的操作,我不确定我要问什么。

1 个答案:

答案 0 :(得分: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';