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

उन पंक्तियों को खोजें जिनका एक कॉलम में समान मान है और दूसरे कॉलम में अन्य मान हैं?

यह संबंधपरक विभाजन का मामला है . हमने इस संबंधित प्रश्न के तहत तकनीकों का एक शस्त्रागार इकट्ठा किया है:

विशेष कठिनाई अतिरिक्त उपयोगकर्ताओं को बाहर करना है। मूल रूप से 4 तकनीकें हैं।

मेरा सुझाव है कि LEFT JOIN / IS NULL :

SELECT cu1.conversation_id
FROM        conversation_user cu1
JOIN        conversation_user cu2 USING (conversation_id)
LEFT   JOIN conversation_user cu3 ON cu3.conversation_id = cu1.conversation_id
                                 AND cu3.user_id NOT IN (3,32)
WHERE  cu1.user_id = 32
AND    cu2.user_id = 3
AND    cu3.conversation_id IS NULL;

या NOT EXISTS :

SELECT cu1.conversation_id
FROM   conversation_user cu1
JOIN   conversation_user cu2 USING (conversation_id)
WHERE  cu1.user_id = 32
AND    cu2.user_id = 3
AND NOT EXISTS (
   SELECT 1
   FROM   conversation_user cu3
   WHERE  cu3.conversation_id = cu1.conversation_id
   AND    cu3.user_id NOT IN (3,32)
   );

दोनों क्वेरी नहीं करती हैं एक UNIQUE पर निर्भर करते हैं (conversation_id, user_id) . के लिए बाधा , जो जगह में हो भी सकता है और नहीं भी। मतलब, क्वेरी तब भी काम करती है जब user_id 32 (या 3) एक ही बातचीत के लिए एक से अधिक बार सूचीबद्ध है। आप करेंगे हालांकि, परिणाम में डुप्लिकेट पंक्तियाँ प्राप्त करें, और DISTINCT apply लागू करने की आवश्यकता है या GROUP BY .
एकमात्र शर्त वह है जिसे आपने तैयार किया है:

अंकेक्षित क्वेरी

टिप्पणी में आपके द्वारा लिंक की गई क्वेरी काम नहीं करेगा। आप अन्य प्रतिभागियों को बाहर करना भूल गए। कुछ इस तरह होना चाहिए:

SELECT *  -- or whatever you want to return
FROM   conversation_user cu1
WHERE  cu1.user_id = 32
AND    EXISTS (
   SELECT 1
   FROM   conversation_user cu2
   WHERE  cu2.conversation_id = cu1.conversation_id 
   AND    cu2.user_id = 3
   )
AND NOT EXISTS (
   SELECT 1
   FROM   conversation_user cu3
   WHERE  cu3.conversation_id = cu1.conversation_id
   AND    cu3.user_id NOT IN (3,32)
   );

जो अन्य दो प्रश्नों के समान है, सिवाय इसके कि यह एकाधिक पंक्तियों को नहीं लौटाएगा यदि user_id = 3 कई बार जुड़ा हुआ है।



  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 9.1 में किसी तालिका का OID निर्धारित करना?

  2. fe_sendauth:postgresql + laravel . में कोई पासवर्ड आपूर्ति त्रुटि नहीं

  3. पोस्टग्रेस्क्ल कॉपी सीएसवी त्रुटि:अंतिम अपेक्षित कॉलम के बाद अतिरिक्त डेटा

  4. मैं इस पोस्टग्रेज क्वेरी को अमेज़ॅन रेडशिफ्ट में कैसे लिख सकता हूं जैसे कि यह पोस्टग्रेज में जितना अनुकूलित था?

  5. s3 से postgresql rds में डेटा फ़ाइलों को कैसे आयात करें