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

क्वेरी जहां विदेशी कुंजी कॉलम NULL हो सकता है

यदि "यूआईडी के लिए कोई पंक्ति नहीं है", और आप JOIN जैसे आप करते हैं, आपको कोई पंक्ति नहीं . मिलती है परिणाम के रूप में। LEFT [OUTER] JOIN इसके बजाय:

SELECT u.uid, u.fname, u.lname
FROM   u 
LEFT   JOIN u_org o ON u.uid = o.uid 
LEFT   JOIN login l ON u.uid = l.uid 
WHERE (o.orgid = 2 OR o.orgid IS NULL)
AND    l.access IS DISTINCT FROM 4;

साथ ही, आपको ऑपरेटर प्राथमिकता . (AND OR . से पहले बाइंड करता है )।

मैं IS DISTINCT FROM . का उपयोग करता हूं != . के बजाय अंतिम WHERE स्थिति में क्योंकि, फिर से, login.access हो सकता है NULL , जो योग्य नहीं होगा।

हालांकि, चूंकि आप केवल तालिका u . के कॉलम में रुचि रखते हैं शुरू करने के लिए, यह वैकल्पिक प्रश्न अधिक सुरुचिपूर्ण होगा:

SELECT u.uid, u.fname, u.lname
FROM   u
WHERE (u.uid IS NULL OR EXISTS (
   SELECT 1
   FROM   u_org o
   WHERE  o.uid = u.uid
   AND    o.orgid = 2
   ))
AND NOT EXISTS (
   SELECT 1
   FROM   login l
   WHERE  l.uid = u.uid
   AND    l.access = 4
   );

इस विकल्प का अतिरिक्त लाभ यह है कि आपको हमेशा एक . मिलता है u . से पंक्ति , भले ही u_org . में अनेक पंक्तियाँ हों या login




  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 में JSON सरणियों को कैसे पार्स कर सकता हूं?

  2. GORM रिकॉर्ड बनाता है जो पहले से मौजूद हो सकता है

  3. DBeaver और PostgreSQL में सीरियल डेटा प्रकार की समस्याएं

  4. दिनों की गतिशील श्रृंखला के बाद से उच्चतम समीक्षा संख्या वाले ऐप्स प्राप्त करें

  5. RPAD () PostgreSQL में फ़ंक्शन