2011-01-26 9 views
13

मैं अपने डेटाबेस में संपत्तियों की एक सूची अद्यतन करने के लिए इस तरह की एक एसक्यूएल का उपयोग किया गया है:एसक्यूएल अद्यतन, लेकिन केवल तभी वर्ष मान शून्य

update my_table set a = ?, b = ?, c = ?, d = ?, where customer = ? 

लेकिन मैं एक नया मान के साथ एक संपत्ति को अपडेट करना चाहते केवल अगर उसके पास पहले से ही डेटाबेस में कोई मान नहीं है। मैं उसे कैसे कर सकता हूँ?

+1

आपकी आरडीबीएमएस क्या है? Oracle का उपयोग कर –

+0

Im। –

उत्तर

3

आप ओरेकल उपयोग कर रहे हैं:

update my_table 
    set a = nvl(a, new_a_value), 
     b = nvl(b, new_b_value), 
     c = nvl(c, new_c_value), 
     d = nvl(d, new_d_value), 
where customer = ? 

आप ओरेकल का उपयोग नहीं कर रहे हैं, तो आरडीबीएमएस के साथ सवाल अपडेट कर लें आप उपयोग कर रहे हैं, या अपने डेटाबेस में समारोह की तरह एक nvl के लिए देखो।

1
update YourTable 
    set a = coalesce(a, NewValueA), 
     b = coalesce(b, NewValueB), 
     ... 
    where customer = ? 
2

आप पंक्ति में एक मैदान पर कर रही क्षेत्र के आधार प्रति के बारे में बात कर रहे हैं:

update my_table 
set a = coalesce(a, ?), 
    b = coalesce(b, ?), 
    c = coalesce(c, ?) 
where customer = ? 
18

इस तरह एमएस एसक्यूएल कुछ में (यह मानते हुए गैर मूल्य का मतलब है डेटाबेस NULL) काम करना चाहिए:

update 
    my_table 
set 
    a = COALESCE(a, ?), 
    b = COALESCE(b, ?), 
    c = COALESCE(c, ?), 
    d = COALESCE(d, ?) 
where 
    customer = ? 

COALESCE() अपने तर्कों से पहले गैर शून्य मूल्य देता है।

+1

@marc_s - COALESCE एएनएसआई एसक्यूएल है और सभी आरडीबीएमएस सिस्टम पर समर्थित होना चाहिए। ISNULL एक आरडीबीएमएस विशिष्ट कार्य है। चूंकि ओपी कभी भी उल्लेख नहीं करता कि वे किस प्लेटफ़ॉर्म का उपयोग कर रहे हैं, मुझे लगता है कि COALESCE सही उत्तर है। –

1

की "शून्य है" या आपके प्रश्नों में "शून्य" नहीं है, संयोजन का प्रयोग करें अर्थात

अद्यतन My_table एक = सेट? ग्राहक =? और एक शून्य

बेशक, यह केवल कॉलम के लिए काम करता है जहां शून्य एक कानूनी मान है। वास्तव में यह जानना मुश्किल है कि विभिन्न स्तंभों पर बाधाओं को जानने के बिना वास्तव में कौन सी क्वेरी आपके लिए काम करेगी।

1

MySQL में, आप कर सकता है:

UPDATE my_table 
SET 
a = IFNULL(a, ?), 
b = IFNULL(b, ?), 
c = IFNULL(c, ?), 
d = IFNULL(d, ?) 
where customer = ? 
0

इस कोड एसक्यूएल प्रयास करें देशी यह बहुत अच्छी तरह से मेरे लिए काम है:

UPDATE table 
SET field = 'NO' 
WHERE field 
IS NULL 
OR field = '' 

अद्यतन सिर्फ शून्य मूल्य या खाली।

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