【发布时间】:2016-09-21 20:36:46
【问题描述】:
我正在尝试进行批量更新:
> update ti_table set enabled=T.enabled
from (select * from
unnest(array['2001622', '2001624', '2007903']) as id,
unnest(array[15,14,8]) as ver,
unnest(array['type1', 'type1', 'type1']) as type,
unnest(array[false, true, true]) as enabled) T
where ti_table.id=T.id AND ti_table.ver=T.ver AND ti_table.type=T.type;
但是,当我回读时:
> select id, ver, type, enabled from ti_table where id in ('2001622', '2001624', '2007903');
我明白了:
id | ver | type | enabled
---------+-----+-------+---------
2001622 | 15 | type1 | f
2001624 | 14 | type1 | f
2007903 | 8 | type1 | f
在最后两行 enabled 是 false 而我预计它是 true
为什么会发生这种情况,我该如何正确地做到这一点?
谢谢。
【问题讨论】:
-
嗯,您正在更新
ti_table并回读ti_rules。 -
子查询似乎返回了 81 个结果(3*3*3*4)...显然每个 unnest 为每个值返回一个集合...
-
@MatheusOl 我修正了这是一个错字。问题是内部选择执行笛卡尔积,而不是为具有相同索引的每组值创建单行。
标签: postgresql bulkupdate