2011-12-21 10 views
8

के लिए एकाधिक कॉलम जांचें क्या यह जांचने के लिए एक और संक्षिप्त वाक्यविन्यास है कि एकाधिक कॉलम शून्य नहीं हैं? मैंओरेकल एसक्यूएल सिंटेक्स - आईएस नॉट

weight IS NOT NULL AND 
weight_unit IS NOT NULL AND 
length IS NOT NULL AND 
width IS NOT NULL AND 
height IS NOT NULL AND 
dimensional_unit IS NOT NULL 

को कम करने के लिए सरल बनाना चाहता हूं।

ओरेकल का उपयोग करके, यदि यह प्रासंगिक है।

+0

मुझे पूरा यकीन है कि यह एक डुप्ली है लेकिन मुझे इसका पता लगाना प्रतीत नहीं होता है। – JNK

+3

यदि यह ऐसी स्थिति होने की संभावना है जिसे आप टालना चाहते हैं (यानी सभी नल) तो मैं तालिका पर नल की बाधाओं को जोड़ने का सुझाव नहीं दूंगा और फिर आपकी क्वेरी को जांचने की आवश्यकता नहीं होगी। – DaveRlz

+0

@ डेवआरएलज़ के साथ सहमत: क्रमशः 'थिंगवेइट' और 'थिंगसाइज' के लिए अलग-अलग टेबल रखने का सुझाव दें ताकि यदि किसी चीज का वजन अज्ञात/लागू नहीं है/आदि तो 'थिंगवेइट' तालिका में कोई पंक्ति न जोड़ें। – onedaywhen

उत्तर

2

जहां तक ​​मुझे पता है, ऐसा वाक्यविन्यास नहीं है।

लेकिन अगर उन सभी को सांख्यिक आप इस चाल का उपयोग कर सकते हैं:

weight + weight_unit + length + width + height + dimensional_unit is not null 
+7

यह एक बुरा विचार होगा यदि किसी भी कॉलम में इंडेक्स है, क्योंकि यह डेटाबेस को क्वेरी का जवाब देने के लिए इंडेक्स का उपयोग करने से रोक देगा। और साथ चिपकने के लिए बेहतर है। –

+2

यदि कोई भी इस चाल को वर्चर 2 या वर्कर कॉलम के संयोजन के लिए अनुवाद करना चाहता है, तो आईडी काम नहीं करेगी। ओरेकल में concatenation का उपयोग कर। 'ए || यदि 'बी' शून्य है तो बी' ए' होगा।तो 'सी 1 || सी 2 || सी 3 || यदि कोई कॉलम शून्य नहीं था तो सी 4 'शून्य नहीं होगा। –

+2

@ सकुंडीम - वास्तव में यहां कोई समस्या नहीं है। 6 जंजीर 'नॉट नल' स्थितियां इंडेक्स अनुकूल नहीं होने वाली हैं, हालांकि आप इसे करते हैं। –

13

De Morgan's law के साथ:

नहीं (ए या बी) = (नहीं क) और (नहीं बी)

आप 20 वर्ण बचाने;)

NOT (
weight IS NULL OR 
weight_unit IS NULL OR 
length IS NULL OR 
width IS NULL OR 
height IS NULL OR 
dimensional_unit IS NULL 
) 
-1

आप अगर सभी स्तंभों शून्य तो आप अपने कॉलम पहले जुटना सकते हैं और फिर एक बार परीक्षण नहीं कर रहे हैं जाँच करना चाहते हैं शून्य जैसे नहीं है के लिए:

weight || weight_unit || length || width || height || dimensional_unit IS NOT NULL 

यह जांच करेगा कि सभी मूल्यों को एक साथ उन क्षेत्रों के पार कुल न्यूल में मत आओ।

यदि यह जांच कर रहा है कि उनके बीच कोई नल हो सकता है तो मुझे लगता है कि प्रश्न से आपका मूल विवरण अभी भी ऐसा करने का सबसे अच्छा तरीका है।

+1

वह चाहता है कि उनमें से कोई भी पूर्ण न हो। आपने जो लिखा है उसे कोलेसेस (wheight, length, ...) के साथ बेहतर लिखा जा सकता है –

+0

माफी नहीं है, तदनुसार –

+0

ओरेकल में अपडेट किया गया है, संशोधित उत्तर सही होगा यदि कोई मान शून्य नहीं है, न कि सभी उत्तर शून्य नहीं हैं (उदाहरण के लिए '' ए '|| शून्य =' ए'')। – Allan

-2

कैसे इस बारे में ..... सम्मिलित (फ़ील्ड 1, field2, ...., fieldn) नहीं रिक्त है

मुझे लगता है कि इस उद्देश्य के काम करेगा !!!!

+2

यह नहीं होगा। यह सच है अगर कॉलम में से कम से कम एक शून्य नहीं है, तो प्रश्न यह जांचना है कि सभी कॉलम शून्य नहीं हैं। –

-1

मैं इस समस्या, हल करने के लिए सभी स्तंभों/चर प्रकार संख्यात्मक या varchar2 की कर रहे हैं तो हम एसक्यूएल में निम्नलिखित तरीके से उपयोग कर सकते हैं की कोशिश की, PL/SQL:

LENGTH(COL1||COL2||COL3) IS NOT NULL 

आशा यह आप में मदद मिलेगी।

0
ALTER TABLE X 
    ADD CONSTRAINT C_X_NN 
     CHECK ( (
       DECODE (weight, NULL, 0, 1) + 
       DECODE (weight_unit, NULL, 0, 1) + 
       DECODE (length  , NULL, 0, 1) + 
       DECODE (width  , NULL, 0, 1) + 
       DECODE (height  , NULL, 0, 1) + 
       DECODE (dimensional_unit , NULL, 0, 1) 
       ) = 0 
      ); 
+1

शायद आपके कोड के साथ कुछ स्पष्टीकरण? – Rafalon

+0

यह एक बहुत अच्छा समाधान है, डाउनवॉट्स क्यों? – Tobia

संबंधित मुद्दे