SQL更新语句,用于固定值列表

时间:2012-12-12 04:04:38

标签: sql

我有一个键/值对列表,我想通过单个SQL语句更新。每行的更新值不同。使用另一个表中的值进行动态更新似乎相当琐碎。但我没有对表中的值进行更新,我宁愿不创建临时表来执行此操作。

我希望能够做类似

的事情
UPDATE table
SET update_column = IN(value1,value2)
WHERE key_column IN(Key1 , Key2)
AND Criteria_column = 'Criteria'

1 个答案:

答案 0 :(得分:1)

在PostgreSQL中,可能在其他数据库中,您可以(有点笨拙地)使用UNION ALL就地构建“表格”:

UPDATE table
SET update_column = temp.value
FROM (
    SELECT 'foo' AS id, 'bar' AS value
      UNION ALL
    SELECT 'baz' AS id, 'qux' AS value
      UNION ALL
    SELECT 'et' AS id, 'cetera' AS value
) temp
WHERE key_column = temp.id
AND Criteria_column = 'Criteria';

在更新版本的PostgreSQL中,构建就地表的语法得到了改进:

UPDATE table
SET update_column = temp.value
FROM (
    VALUES ('foo', 'bar'), ('baz', 'qux'), ('et', 'cetera')
) temp (id, value)
WHERE key_column = temp.id
AND Criteria_column = 'Criteria';