2013-07-09 7 views
6

こんにちは、リミットとオフセットを持つ他のテーブルから値を持つテーブルを更新することは可能ですか?ポストグルのリミットとオフセットを持つテーブルを更新する

例えばテーブルt_device 600行 を有しT_OBJECT iは列を更新したいが

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; 

ようなサブクエリからのオフセットでのみ最初の100行がそれである100行

を有します可能?私はあなただけid_objectするid_objectを設定している場合、多くの使用であることを行っているようにUPDATE文が見えないことはpostgres 8.4

答えて

7
  • を使用して

    T_OBJECTイムからt_deviceに値をmodiveするための解決策を見つけるカント、セミランダムな順序ではあるが。
  • 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; 
+0

でそれを更新して、それを解決しました。 id_object; "彼らは関係がないので、私は0行を更新します。私はちょうどt_objectからの値をid(このテーブルのデルでは103行とデバイス600です)でオフセット0,100,200などt_deviceの100行を更新する必要があります) –

0

iがWHERE t.id_object = t_device」でカラム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 
関連する問題