with cte as(
select ....... from aTable
),update_cte as(
update cte set aField=(select somthing from cte1)
)
आप ऐसा नहीं कर सकते।
एक UPDATE
पोस्टग्रेएसक्यूएल में सीटीई शब्द का संदर्भ नहीं दे सकता है, क्योंकि सीटीई भौतिक हो गए हैं। वे केवल अंतर्निहित डेटा पर विचार नहीं हैं। (यह कभी-कभी वास्तव में कष्टप्रद होता है, लेकिन ऐसा ही होता है)।
आप कर सकते हैं:
CREATE TEMPORARY VIEW someview AS SELECT ... FROM atable;
UPDATE someview SET afield = ...
अगर तुम चाहते हो; यह नए PostgreSQL संस्करणों पर काम करेगा जो स्वचालित रूप से अद्यतन करने योग्य दृश्यों का समर्थन करते हैं। मुझे लगता है कि 9.2 करता है।
अन्यथा, मुझे लगता है कि आप कुछ ऐसा चाहते हैं:
WITH cte1 as (
select ..... from bTable inner join cte using(anID)
)
update aTable
set aField=(select somthing from cte1)
WHERE ... where clause from cte ...
RETURNING *;
लेकिन वास्तव में, कृपया नहीं अपनी सीटीई शर्तों को कॉल करें cte
, cte1
, आदि। उन्हें उपयोगी, वर्णनात्मक नाम दें जो आपको बताते हैं कि वे क्या हैं। यह a
. नामक चरों से भरे प्रोग्राम की तरह है x
. के माध्यम से ... अगला व्यक्ति जिसे आपका कोड बनाए रखना है, या जिसे आप मदद मांगेंगे, वह नहीं इसे पसंद करें।