PostgreSQL
 sql >> डेटाबेस >  >> RDS >> PostgreSQL

PostgreSQL:CTE में पंक्तियों को कैसे अपडेट करें

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 . के माध्यम से ... अगला व्यक्ति जिसे आपका कोड बनाए रखना है, या जिसे आप मदद मांगेंगे, वह नहीं इसे पसंद करें।




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. क्या पोस्टग्रेज अपडेट पर पूरी पंक्ति को फिर से लिखता है?

  2. पायथन का उपयोग करके PostgreSQL डेटाबेस में 'NULL' मान कैसे सम्मिलित करें?

  3. पूर्णांक को सीरियल में कैसे बदलें

  4. plpgsql फ़ंक्शन में तालिका और स्तंभ नामों को तर्क के रूप में परिभाषित करें?

  5. आप पोस्टग्रेज में दिनांक सीमा का चयन कैसे करते हैं?