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

MySql, Postgres, Oracle और SQLServer को अनदेखा करना IS NOT NULL फ़िल्टर

परिणाम . से पंक्ति को हटाने के लिए यदि कोई स्रोत एक ही id . के लिए पंक्तियां इसमें मान IS NULL है , पोस्टग्रेज . में एक समाधान एग्रीगेट फ़ंक्शन का उपयोग करना होगा हर () या (ऐतिहासिक कारणों का पर्यायवाची) बूल_और () होने . में खंड:

SELECT id
     , max(case when colID = 1 then value else '' end) AS fn
     , max(case when colID = 2 then value else '' end) AS ln
     , max(case when colID = 3 then value else '' end) AS jt
FROM   tbl 
GROUP  BY id
HAVING every(value IS NOT NULL);

SQL Fiddle.

व्याख्या करें

WHERE . के साथ आपका प्रयास क्लॉज सिर्फ एक को खत्म कर देगा id =3 . के लिए स्रोत पंक्ति आपके उदाहरण में (colID =1 . वाला वाला ), एक ही id . के लिए दो और छोड़कर . तो हमें अभी भी id =3 . के लिए एक पंक्ति मिलती है परिणाम में एकत्रीकरण के बाद।

लेकिन चूंकि हमारे पास colID =1 . के साथ कोई पंक्ति नहीं है , हमें एक खाली स्ट्रिंग मिलती है (नोट:NULL . नहीं value!) fn . के लिए id =3 . के परिणाम में ।

Postgres में एक तेज़ समाधान crosstab() . का उपयोग करना होगा . विवरण:

अन्य RDBMS

जबकि हर एसक्यूएल:2008 मानक में परिभाषित किया गया है, कई आरडीबीएमएस इसका समर्थन नहीं करते हैं, संभवतः क्योंकि उनमें से कुछ में बूलियन प्रकार के छायादार कार्यान्वयन हैं। ("MySQL" या "Oracle" जैसे किसी भी नाम को नहीं छोड़ना ...) आप शायद हर जगह (पोस्टग्रेज सहित) इसके साथ स्थानापन्न कर सकते हैं:

SELECT id
     , max(case when colID = 1 then value else '' end) AS fn
     , max(case when colID = 2 then value else '' end) AS ln
     , max(case when colID = 3 then value else '' end) AS jt
FROM   tbl 
GROUP  BY id
HAVING count(*) = count(value);

क्योंकि गिनती () NULL मानों की गणना नहीं करता है। MySQL में बिट_और () .इस संबंधित प्रश्न के तहत और अधिक:



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. इस चयन क्वेरी को समाप्त होने में 180 सेकंड लगते हैं

  2. दूसरी चयन क्वेरी यदि पहले चयन 0 पंक्तियाँ लौटाता है

  3. हाइबरनेट, C3P0, मैसकल - टूटा हुआ पाइप

  4. MySQL क्वेरी बड़े डेटा पर धीमी गति से चलती है

  5. दिनों या महीनों के व्यवसाय के आधार पर कमरों की उपलब्धता का प्रबंधन कैसे करें