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