2010-06-22 16 views
13

कृपया ध्यान दें: मैं am प्रश्न पूछ रहा हूं जिसे मैं जवाब देना चाहता हूं। मुझे पता है कि इस सवाल का मतलब है कि डेटाबेस खराब स्थापित किया गया है। तो मैं किसी भी उत्तर को वोट दूंगा जो तालिका स्थापित करने के तरीके को बदलने का सुझाव देता है।ओरेकल: एक फ़ील्ड को अपडेट करते समय पंक्ति की प्रतिलिपि

मुझे एक मूल्य बदलने के दौरान पंक्तियों का एक गुच्छा डुप्लिकेट करने की आवश्यकता है। इस तालिका में सभी प्रविष्टियों जहां col2 is null, टेबल जहां name और col1 कॉपी कर रहे हैं में एक नई प्रविष्टि बनाने के लिए

name col1 col2 
dave a nil 
dave a a 
sue b nil 
sue b a 
same c 5 

आईई, और col2a है:

name col1 col2 
dave a nil 
sue b nil 
sam c 5 

बनने के लिए की जरूरत है।

+0

क्या आप कभी-कभी 'नील' कहते हैं तो 'नूल' का मतलब है? – tvCa

उत्तर

17

उपयोग:

INSERT INTO table 
    (name, col1, col2) 
SELECT t.name, t.col1, 'a' 
    FROM TABLE t 
WHERE t.col2 IS NULL 

संभालने है कि न तो name या col1 कॉलम प्राथमिक कुंजी हैं या तो पर एक अद्वितीय बाधा है।

+0

पिछली टिप्पणी हटा दी गई: मुझे मेरी बग मिली। हाँ, यह काम किया। धन्यवाद! –

+3

इस कोड को तालिका कॉलम की सूची दोहराने की आवश्यकता है, और तालिका में कॉलम जोड़े जाने पर तोड़ देगा। क्या अनचाहे कॉलम सूचीबद्ध किए बिना ऐसा करने का कोई तरीका है? –

+0

@kevincline देखें http://stackoverflow.com/a/28278824/1611055 –

3

क्या यह ऐसा करेगा?

INSERT INTO yourtable 
     (SELECT name, col1, 'a' 
      FROM yourtable 
     WHERE col2 is NULL); 
+0

+1 अच्छा जवाब, हालांकि यह वास्तव में मेरे मामले में काम नहीं करता है। मैं केवल टेबल में कुछ फ़ील्ड populating हूँ। –

+0

तालिका में अधिक कॉलम होने पर, ओआरए त्रुटि को जोखिम देना चाहिए। –

+0

यूप, धारणा तालिका में उदाहरण के लिए कॉलम था। – DCookie

0

स्तंभों की संख्या बड़ी है, तो आप एक अस्थायी तालिका में डेटा आप चाहते हैं नकल कर सकता है, जैसा कि आप चाहते थे अस्थायी तालिका में डेटा को बदलने, तो मूल में अस्थायी तालिका की सामग्री की प्रतिलिपि वापस , और अस्थायी तालिका हटा दें।

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