假设我想进行批量更新,为a值的集合设置a=b。这可以通过一系列查询轻松完成:UPDATE
UPDATE foo SET value='foo' WHERE id=1
UPDATE foo SET value='bar' WHERE id=2
UPDATE foo SET value='baz' WHERE id=3
但现在我想我想批量执行此操作。我有一个包含 id 和新值的二维数组:
[ [ 1, 'foo' ]
[ 2, 'bar' ]
[ 3, 'baz' ] ]
有没有一种有效的方法可以在单个 SQL 查询中执行这三个更新?
我考虑过的一些解决方案:
临时表
CREATE TABLE temp ...; INSERT INTO temp (id,value) VALUES (....); UPDATE foo USING temp ...
但这真的只是解决了问题。尽管进行批量 INSERT 可能更容易(或至少不那么难看),但仍然至少有三个查询。
通过将数据对作为 SQL 数组传递来对输入进行非规范化。但是,这使得查询非常难看
UPDATE foo USING ( SELECT split_part(x,',',1)::INT AS id, split_part(x,',',2)::VARCHAR AS value FROM ( SELECT UNNEST(ARRAY['1,foo','2,bar','3,baz']) AS x ) AS x; ) SET value=x.value WHERE id=x.id
这使得使用单个查询成为可能,但使查询变得丑陋且效率低下(尤其是对于混合和/或复杂的数据类型)。
有更好的解决方案吗?或者我应该求助于多个 UPDATE 查询?