क्या आपने पोस्टग्रेज के गैर-मानक UPDATE .. FROM
. की कोशिश की है खंड? मुझे लगता है, यह काम करेगा
update mytable
set a = first_part(gen.id),
b = second_part(gen.id),
c = third_path(gen.id)
from (
select genid() as genid, id
from mytable
where package_id = 10
) gen
where mytable.id = gen.id;
--and package_id = 10 -- This predicate is no longer necessary as the subquery
-- already filters on package_id, as Erwin mentioned
ध्यान दें कि मैं मजबूर कर रहा हूं genid()
mytable
. में प्रति रिकॉर्ड ठीक एक बार कॉल करने के लिए उप-चयन के भीतर। फिर मैं mytable
से सेल्फ-जॉइन कर रहा हूं और gen
एक काल्पनिक id
. का उपयोग करना कॉलम। दस्तावेज़ यहाँ देखें:
http://www.postgresql.org/docs/current/interactive /sql-update.html
ऐसा लगता है कि इसे केवल Postgres 9.0 के साथ ही पेश किया गया है। यदि यह बहुत जटिल लगता है (अर्थात बहुत पठनीय नहीं), तो आप अभी भी pgplsql का उपयोग उपयोगकर्ता के रूप में कर सकते हैं फ़्लोरिन का सुझाव यहां दिया गया है
।