2013-07-09 8 views
6

hi czy można aktualizować tabelę z wartościami z drugiej tabeli z limitem i offsetem?Tabela aktualizacji z limitem i offsetem w postgresie

na przykład t_device stół ma 600 wierszy i t_object ma 100 wierszy

chcę zaktualizować kolumny, ale tylko pierwsze 100 wierszy z offsetem od podkwerendzie jak

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; 

jest to możliwy? nie mogę znaleźć rozwiązanie modive wartość w t_device z t_object

im przy postgres 8.4

Odpowiedz

7
  • Stwierdzenie UPDATE nie wygląda to będzie znacznie stosowanie jeśli jesteś po prostu ustawienie id_object do id_object , choć w przypadkowej kolejności.
  • Jeśli nie ma unikatowego predykatu WHERE w instrukcji UPDATE tabeli t_device, nie ma gwarancji, że zaktualizowane zostanie tylko 100 wierszy, co jest moim zdaniem zamierzeniem zewnętrznego LIMIT.
  • Powinieneś mieć ORDER BY w podzapytaniu, aby upewnić się, że nie zachodzą na siebie w rzędach.

Może Ci się przydarzyć coś takiego.

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

z „GDZIE t.id_object = t_device. id_object; " aktualizuję 0 wierszy, ponieważ nie mają żadnej relacji, wystarczy zaktualizować zawsze 100 wierszy w t_device z przesunięciami 0, 100, 200 itd. z wartościami od t_object uporządkowanymi według id (w tej tabeli der są tylko 103 wiersze i w urządzeniu 600) –

0

I rozwiązać to generowanie ROWNUMBER kolumny i i aktualizowane to wartości końcowe (1, 2, 3)

i

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 
Powiązane problemy