我有一个表my_obj
,其中包含两个字段value_a varchar(5)
和value_b varchar(5)
实际上,这两个值变化不大,可以成对分组。最多只能给出一个最大数量< 100对。相反,我在my_obj
中有数百万条记录。
所有干扰value_a
和value_b
的查询都需要很长时间。所以我决定为所有可能的对创建表对,其中包含value_a
和value_b
字段。因此,我在表my_obj
中添加了字段id_pair。
我已经用它的所有对填充了表对,没关系。
所以,现在,我想用这个命令相应地更新表my_obj
:
update my_obj
set id_pair = p.id
from my_obj as o
inner join pair as p on p.value_a = o.value_a and p.value_b = o.value_b;
虽然该查询已推出很长时间,但我运行了select count(*) from my_obj where id_pair > 0;
并返回了我0
因此我的更新查询出现问题。
EDIT / NB :作为事务单元的plpgsql函数在事务结束时执行提交,所以完全正常我在表中看不到任何修改因为我中断了这个功能。
我使用my_obj
主键的条件更改了更新查询,以便只在一条记录上执行一个update
。
update my_obj
set id_pair = p.id
from my_obj as o
inner join pair as p on p.value_a = o.value_a and p.value_b = o.value_b
where o.id = 1234567; -- 1234567 being the key of an existing record
令人惊讶的是,当我启动此update
只有一条记录的查询时,似乎永远。
我做错了什么?
答案 0 :(得分:3)
这对你有什么用?
update my_obj o
set id_pair = p.id
from pair p
where p.value_a = o.value_a and
p.value_b = o.value_b and
o.id = 1234567;