我有一个键/值对列表,我想通过单个SQL语句更新。每行的更新值不同。使用另一个表中的值进行动态更新似乎相当琐碎。但我没有对表中的值进行更新,我宁愿不创建临时表来执行此操作。
我希望能够做类似
的事情UPDATE table
SET update_column = IN(value1,value2)
WHERE key_column IN(Key1 , Key2)
AND Criteria_column = 'Criteria'
答案 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';