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

तालिका से डुप्लिकेट निकालें और संदर्भ पंक्तियों को नए मास्टर से दोबारा लिंक करें

इस एकल आदेश को यह सब करना चाहिए:

WITH blacklist AS (  -- identify duplicate IDs and their master
   SELECT *
   FROM  (
      SELECT transcription_id
           , min(transcription_id) OVER (PARTITION BY text, citation) AS master_id
      FROM   transcription
      ) sub
   WHERE  transcription_id <> master_id
   )
, upd AS (  -- redirect referencing rows
   UPDATE town_transcription tt
   SET    transcription_id = b.master_id
   FROM   blacklist b
   WHERE  b.transcription_id = tt.transcription_id
   )
DELETE FROM transcription t  -- kill dupes (now without reference)
USING  blacklist b
WHERE  b.transcription_id = t.transcription_id;

परिभाषा की कमी के लिए मैंने प्रति समूह सबसे छोटी आईडी वाली पंक्ति को जीवित मास्टर पंक्ति के रूप में चुना।

जब तक आपके पास गैर-डिफ़ॉल्ट सेटिंग्स नहीं हैं, तब तक FK बाधाएं रास्ते में नहीं आती हैं। विस्तृत विवरण:

डुप्ली को हटाने के बाद अब आप एक UNIQUE . जोड़ना चाहेंगे एक ही त्रुटि को दोबारा होने से रोकने के लिए बाधा:

ALTER TABLE transcription
ADD CONSTRAINT transcription_uni UNIQUE (text, citation);


  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. रेल 3.1:एक समय सीमा के भीतर रिकॉर्ड के लिए पोस्टग्रेज को क्वेरी करना

  3. अजगर psycopg2 जाँच पंक्ति मौजूद है

  4. मैं तैयार बयान के साथ पोस्टग्रेस्क्ल में टाइमज़ोन के साथ टाइमस्टैम्प कैसे डाल सकता हूं?

  5. ऐसे कॉलम ढूँढना जो PostgreSQL में NULL नहीं हैं