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

मिलान किए गए सरणी तत्वों को बाहर करें

ऐसा लगता है XOR सरणियों के बीच:

WITH set1 AS
(
 SELECT * FROM unnest('{1, 2, 5, 15}'::int[])
), set2 AS
(
 SELECT * FROM unnest('{1, 2, 3, 6, 7, 9, 15}'::int[])
), xor AS
(
  (SELECT * FROM set1
   UNION 
   SELECT * FROM set2)
  EXCEPT
  (SELECT * FROM set1
   INTERSECT 
   SELECT * FROM set2)
)
SELECT array_agg(unnest ORDER BY unnest)
FROM xor

आउटपुट:

"{3,5,6,7,9}"

यह कैसे काम करता है:

  1. दोनों सरणियों को अननेस्ट करें
  2. योग की गणना करें
  3. प्रतिच्छेद की गणना करें
  4. एसयूएम से - इंटरसेक्ट
  5. सरणी में संयोजित करें

वैकल्पिक रूप से आप दोनों माइनस (सिवाय) संचालन के योग का उपयोग कर सकते हैं:

(A+B) - (A^B)
<=>
(A-B) + (B-A)

FULL JOIN का उपयोग करना :

WITH set1 AS
(
 SELECT *
FROM unnest('{1, 2, 5, 15}'::int[])
), set2 AS
(
 SELECT *
 FROM unnest('{1, 2, 3, 6, 7, 9, 15}'::int[])
)
SELECT array_agg(COALESCE(s1.unnest, s2.unnest) 
                 ORDER BY COALESCE(s1.unnest, s2.unnest))
FROM set1 s1
FULL JOIN set2 s2
  ON s1.unnest = s2.unnest
WHERE s1.unnest IS NULL
  OR s2.unnest IS NULL;

संपादित करें:

यदि आप केवल दूसरी सरणी से तत्व चाहते हैं जो नहीं हैं तो पहले सरल EXCEPT . का उपयोग करें :

SELECT array_agg(unnest ORDER BY unnest)
FROM (SELECT * FROM unnest('{1, 2, 3, 6, 7, 9, 15}'::int[])
      EXCEPT
      SELECT * FROM unnest('{1, 2, 5, 15}'::int[])) AS sub

आउटपुट:

"{3,6,7,9}"


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. PostgreSQL में एकाधिक कॉलम के लिए प्राथमिक कुंजी?

  2. पोस्टग्रेज़ सेलेक्ट स्टेटमेंट में किसी अन्य तालिका में पंक्तियों की संख्या का चयन करें

  3. क्या पुनरावर्ती SQL क्वेरी बनाना संभव है?

  4. घबराहट:एसक्यूएल:स्कैन में अपेक्षित 1 गंतव्य तर्क, नहीं <संख्या> गोलंग, पीक्यू, एसक्यूएल

  5. तालिका नाम का उचित सम्मिलन