1

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

我希望能够做类似的事情

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

1 回答 1

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';
于 2012-12-12T04:18:41.890 回答