9

嗨,是否可以使用具有限制和偏移量的其他表的值来更新表?

例如表 t_device 有 600 行,而 t_object 有 100 行

我想更新一列,但只有前 100 行具有子查询的偏移量,例如

update t_device set id_object = 
(select id_object from t_object limit 100) limit 100 offset 0;

update t_device set id_object = 
(select id_object from t_object limit 100) limit 100 offset 100;

可能吗?我找不到从 t_object 修改 t_device 中的值的解决方案

我正在使用 postgres 8.4

4

2 回答 2

9
  • 如果您只是将 id_object 设置为 id_object,那么该 UPDATE 语句看起来并没有多大用处,尽管它是半随机顺序的。
  • 如果 t_device 表 UPDATE 语句中没有唯一的 WHERE 谓词,则不能保证只有 100 行将被更新,这就是我假设外部 LIMIT 的意图。
  • 您应该在子查询中有一个 ORDER BY 以确保您不会在行中重叠。

像下面这样的东西可能对你有用。

UPDATE t_device set id_object = t.id_object
FROM (select id_object from t_object order by id_object limit 100) t
WHERE t.id_object = t_device.id_object;
于 2013-07-09T15:51:23.560 回答
1

我通过生成列 rowNumber 解决了它,并用增量值(1、2、3)更新了它

接着

UPDATE t_device set id_object = t.id_object FROM 
(select t1.id_object , row_number() OVER (ORDER BY id_object ) AS rn
from  dblink('dbname=*** password=***', 'select id_object from t_object') 
as t1(id_object int) order by id_object limit 103) as t
where t_device.rowNumber = t.rn
于 2013-07-10T07:27:24.317 回答