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

सम्मिलित करें ... चयन से ... रिटर्निंग आईडी मैपिंग

यह UPDATE के लिए आसान होगा , जहां अद्यतन में शामिल अतिरिक्त पंक्तियां RETURNING . को दिखाई देती हैं खंड:

  • केवल SQL - PostgreSQL संस्करण का उपयोग करके पूर्व-अद्यतन कॉलम मान लौटाएं

वही वर्तमान में नहीं है INSERT . के लिए संभव . प्रति दस्तावेज़:

<ब्लॉकक्वॉट>

व्यंजक table_name . द्वारा नामित तालिका के किसी भी स्तंभ नाम का उपयोग कर सकता है

table_name INSERT . का लक्ष्य होने के नाते आदेश।

इसे काम करने के लिए आप (डेटा-संशोधित) सीटीई का उपयोग कर सकते हैं।
title मानते हुए प्रति क्वेरी अद्वितीय . होना , अन्यथा आपको और अधिक करने की आवश्यकता है:

WITH sel AS (
   SELECT id, title
   FROM   posts
   WHERE  id IN (1,2)   -- select rows to copy
   )
,    ins AS (
   INSERT INTO posts (title)
   SELECT title FROM sel
   RETURNING id, title
 )
SELECT ins.id, sel.id AS from_id
FROM   ins
JOIN   sel USING (title);

अगर title प्रति क्वेरी अद्वितीय नहीं है (लेकिन कम से कम id प्रति टेबल अद्वितीय है):

WITH sel AS (
   SELECT id, title, row_number() OVER (ORDER BY id) AS rn
   FROM   posts
   WHERE  id IN (1,2)   -- select rows to copy
   ORDER  BY id
   )
,    ins AS (
   INSERT INTO posts (title)
   SELECT title FROM sel ORDER  BY id  -- ORDER redundant to be sure
   RETURNING id
 )
SELECT i.id, s.id AS from_id
FROM  (SELECT id, row_number() OVER (ORDER BY id) AS rn FROM ins) i
JOIN   sel s USING (rn);

यह दूसरी क्वेरी अनियंत्रित कार्यान्वयन विवरण पर निर्भर करती है कि प्रदान किए गए क्रम में पंक्तियां डाली जाती हैं। यह Postgres के सभी मौजूदा संस्करणों में काम करता है और शायद टूटने वाला नहीं है।

एसक्यूएल फिडल.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Postgres या CouchDB में पूर्ण-पाठ खोज?

  2. रोलिंग दिनांक सीमा में अलग-अलग मानों की गणना के लिए क्वेरी

  3. Postgresql में एक अपरर्ट प्रदर्शन करते समय आंशिक सूचकांक का उपयोग संघर्ष खंड में नहीं किया जाता है

  4. बिना डुप्लीकेट के लेफ्ट जॉइन वाली चार टेबल्स में शामिल हों

  5. जावा एप्लिकेशन में पोस्टग्रेज परिवर्तन को सूचित करना