2013-07-09 9 views
6

hi è possibile aggiornare una tabella con valori di un'altra tabella con limite e offset?tabella di aggiornamento con limite e offset in postgres

per esempio la t_device tabella ha 600 righe e t_object ha 100 righe

voglio aggiornare una colonna ma solo le prime 100 righe con un offset da una subquery come

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; 

è esso possibile? i cant trovare una soluzione al modive il valore in t_device da t_object

im utilizzando Postgres 8.4

risposta

7
  • Tale dichiarazione UPDATE non sembra che sta per essere molto utile se si sta solo impostando id_object a id_object , anche se in ordine semi-casuale.
  • Se non esiste un predicato WHERE univoco nell'istruzione UPDATE della tabella t_device, non è garantito che verranno aggiornate solo 100 righe, che è quello che presumo l'intento del LIMIT esterno.
  • È necessario disporre di un ORDER BY nella subquery per garantire che non si verifichino sovrapposizioni nelle righe.

Qualcosa di simile al seguente potrebbe funzionare per voi.

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

con "WHERE t.id_object = t_device. id_object;" aggiorno 0 righe perché non hanno alcuna relazione Ho solo bisogno di aggiornare sempre 100 righe in t_device con offset 0, 100, 200 ecc. con i valori di t_object ordinati da id (in questa tabella der sono solo 103 righe e nel dispositivo 600) –

0

ho risolto con la generazione di un RowNumber colonna ed e aggiornato con i valori incrementali (1, 2, 3)

e poi

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 
Problemi correlati