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

स्तंभों के एक सेट पर पूर्ण बाधा नहीं

@Igor बिल्कुल सही है और कुछ OR 'ed अभिव्यक्ति तेज और सरल हैं।

स्तंभों की लंबी सूची के लिए (a , b , c , d , e , f , g उदाहरण में), यह छोटा और उतना ही तेज़ है:

CHECK (NOT (a,b,c,d,e,f,g) IS NULL)

db<>फिडल यहाँ
पुरानी SQL Fiddle.

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

उपरोक्त का अधिक क्रियात्मक रूप होगा:

CHECK (NOT ROW(a,b,c,d,e,f,g) IS NULL)

ROW यहाँ बेमानी वाक्य रचना है।

ROW का परीक्षण करना IS NULL के साथ एक्सप्रेशन केवल रिपोर्ट TRUE अगर हर एक कॉलम NULL है - जो ठीक वैसा ही होता है जैसा हम बहिष्कृत करना चाहते हैं।

इस एक्सप्रेशन को केवल (a,b,c,d,e,f,g) IS NOT NULL के साथ उल्टा करना संभव नहीं है , क्योंकि यह परीक्षण करेगा कि हर एक कॉलम IS NOT NULL . है . इसके बजाय, NOT . के साथ पूरे एक्सप्रेशन को नकारें . वोइला।

मैनुअल में अधिक विवरण यहाँ और यहाँ।

प्रपत्र की अभिव्यक्ति:

CHECK (COALESCE(a,b,c,d,e,f,g) IS NOT NULL)

वही हासिल करेगा, कम सुरुचिपूर्ण ढंग से और एक प्रमुख प्रतिबंध के साथ:केवल मिलान डेटा प्रकार के कॉलम के लिए काम करता है , जबकि चेक एक ROW . पर है अभिव्यक्ति किसी भी . के साथ काम करती है कॉलम।



  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. ActiveRecord::AdapterNotनिर्दिष्ट डेटाबेस कॉन्फ़िगरेशन एडेप्टर निर्दिष्ट नहीं करता है

  3. Postgresql संग्रहीत प्रक्रियाओं को कैसे डिबग करें?

  4. सॉकेट फ़ाइल /var/pgsql_socket/.s.PGSQL.5432 माउंटेन लायन में गुम (OS X सर्वर)

  5. पोस्टग्रेएसक्यूएल प्लैनेट इन अंसिबल गैलेक्सी