2013-07-09 7 views
6

नमस्ते क्या तालिका के साथ एक तालिका को अपडेट करना संभव है जिसमें सीमा और ऑफसेट के साथ एक अन्य तालिका है?पोस्टग्रेज़ में सीमा और ऑफ़सेट के साथ अद्यतन तालिका

उदाहरण के लिए तालिका 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; 

यह है एक एक सबक्वेरी द्वारा समायोजित होते पंक्तियों को अपडेट करना चाहते है मुमकिन? मैं नहीं कर सकते postgres 8,4

उत्तर

7
  • कि अद्यतन बयान यह की तरह नहीं दिखता का उपयोग कर अगर आप सिर्फ id_object सेट कर रहे हैं id_object करने के लिए बहुत उपयोग होने जा रहा है t_object

    im से t_device में मूल्य modive का समाधान खोजने , हालांकि अर्ध-यादृच्छिक क्रम में।

  • यदि t_device तालिका अद्यतन विवरण में कोई अनूठा WHERE अनुमानित नहीं है, तो कोई गारंटी नहीं है कि केवल 100 पंक्तियां अपडेट की जाएंगी, जो कि मैं बाहरी LIMIT का इरादा मानता हूं।
  • आपको यह सुनिश्चित करने के लिए कि आप पंक्तियों में ओवरलैप नहीं प्राप्त कर रहे हैं, आपको सबक्वायरी में ऑर्डर देना चाहिए।

कुछ ऐसा आपके लिए काम कर सकता है।

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

"के साथ कहां t.id_object = t_device। id_object, " मैं 0 पंक्तियों को अद्यतन करता हूं क्योंकि उनके पास कोई संबंध नहीं है, मुझे आईडी द्वारा आदेशित t_object के मूल्यों के साथ ऑफसेट 0, 100, 200 आदि के साथ t_device में हमेशा 100 पंक्तियों को अपडेट करने की आवश्यकता है (इस तालिका में केवल 103 पंक्तियां और डिवाइस 600 में हैं) –

0

मैं एक स्तंभ 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 
संबंधित मुद्दे