2011-01-28 11 views
26

में एक स्तंभ के रूप में दो कॉलम की तुलना चयन करने के लिए कैसे मैं यह बताते हैं कि दो कॉलम Oracle में एक ही डेटा होते हैं मेरी चयन करें क्वेरी के लिए एक कॉलम जोड़ने का तरीका समझ नहीं सकता।ओरेकल

मैं की तरह एक प्रश्न लिखने के लिए करना चाहते हैं:

select column1, column2, column1=column2 from table 

और, अगर मैं इस तालिका है:

+---------+---------+ 
| column1 | column2 | 
+---------+---------+ 
| value1 | value1 | 
| value2 | value3 | 
| value4 | value4 | 
+---------+---------+ 

की तरह एक परिणाम मिलता है:

+---------+---------+-----------------+ 
| column1 | column2 | column1=column2 | 
+---------+---------+-----------------+ 
| value1 | value1 | true   | 
| value2 | value3 | false   | 
| value4 | value4 | true   | 
+---------+---------+-----------------+ 

क्या है ऐसा करने के लिए सही वाक्यविन्यास?

+1

जो भी कारण के लिए, Oracle एसक्यूएल MySQL के विपरीत एक बूलियन डेटाप्रकार नहीं है। मुझे सच में आश्चर्य है क्यों। –

+0

whell, true | false, 0 | 1, जो भी बिंदु बनाता है :) –

उत्तर

46

आप शून्य मान समानता भी विचार करना चाहते हैं, तो निम्न

select column1, column2, 
    case 
     when column1 is NULL and column2 is NULL then 'true' 
     when column1=column2 then 'true' 
     else 'false' 
    end 
from table; 
+2

+1 पूर्ण स्तंभों की देखभाल के लिए +1 – Toto

3
select column1, coulumn2, case when colum1=column2 then 'true' else 'false' end from table; 

HTH

11

मैं DECODE कई साल पहले का उपयोग कर क्योंकि यह गैर पोर्टेबल है रोक दिया प्रयास करें। इसके अलावा, यह कम लचीला और एक CASE/WHEN से कम पढ़ी जा सकती है।

हालांकि, वहाँ एक साफ "चाल" आप क्योंकि यह कैसे शून्य के साथ सौदों की डिकोड के साथ कर सकते है। डीकोड में, एनयूएलएल न्यूल के बराबर है। यह बताने के लिए शोषण किया जा सकता है कि दो कॉलम नीचे दिए गए हैं या नहीं।

select a, b, decode(a, b, 'true', 'false') as same 
    from t; 

    A  B SAME 
------ ------ ----- 
    1  1 true 
    1  0 false 
    1   false 
    null null true