2012-12-02 20 views
21

मैं केस स्टेटमेंट का उपयोग करके अपनी तालिका में एकाधिक कॉलम अपडेट करना चाहता हूं, लेकिन मुझे यह नहीं पता कि यह कैसे करना है (यह भी संभव है)। मैं निम्नलिखित अमान्य संदर्भ क्वेरी के साथ आया:MySQL CASE एकाधिक कॉलम अपडेट करने के लिए

UPDATE tablename SET 
    CASE name 
     WHEN 'name1' THEN col1=5,col2='' 
     WHEN 'name2' THEN col1=3,col2='whatever' 
     ELSE col1=0,col2='' 
    END; 

क्या वैध SQL के साथ अपेक्षित परिणाम प्राप्त करने का कोई तरीका है?

+0

संभावित डुप्लिकेट: http://stackoverflow.com/questions/8358642/case-statement-in-sql-how-to-return-multiple-variables – ean5533

+1

वास्तव में, यह एक अद्यतन कथन नहीं है, एक चयन नहीं है। – Villermen

+0

http://stackoverflow.com/q/3432/1553851 – shmosel

उत्तर

29
UPDATE tablename 
SET col1 = CASE WHEN name = 'name1' THEN 5 
       WHEN name = 'name2' THEN 3 
       ELSE 0 
      END 
, col2 = CASE WHEN name = 'name1' THEN '' 
       WHEN name = 'name2' THEN 'whatever' 
       ELSE '' 
      END 
; 
+0

इसके लिए धन्यवाद! मैं ean5533 के प्रारूप का उपयोग करने जा रहा हूं क्योंकि इसमें CASE नाम शामिल है, लेकिन यह एक बेहतर स्वरूपित है इसलिए मैंने इसे उत्तरकर्ता के रूप में चिह्नित किया। – Villermen

+0

दिलचस्प ... मुझे नहीं पता था कि वैध वाक्यविन्यास था। प्रति दिन कुछ नया सीखें। – bobwienholt

+0

इस अद्यतन मामले के लिए धन्यवाद @bobwienholt – Pank

6

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

UPDATE tablename SET 
    col1 = CASE name WHEN 'name1' THEN 5 WHEN 'name2' THEN 3 ELSE 0 END, 
    col2 = CASE name WHEN 'name1' THEN '' WHEN 'name2' THEN 'whatever' ELSE '' END; 

बेशक इस सुंदर नहीं है और एक ही मामलों (जैसे 'name1') कई बार दोहरा आवश्यकता है, लेकिन मैं सिर्फ यह किसी अन्य तरीके से संभव है नहीं लगता।

+0

यह चाल है, और दोहराव PHP के लिए दोहराना मुश्किल नहीं होगा =) धन्यवाद! – Villermen

0

तो name एक अद्वितीय सूचकांक है और अपने मूल्यों तालिका में अस्तित्व के लिए जाना जाता है, तो आप इस चाल का उपयोग कर सकते हैं:

INSERT INTO tablename (name, col1, col2) 
VALUES ('name1', 5, '') 
    , ('name2', 3, 'whatever') 
ON DUPLICATE KEY UPDATE 
     col1 = VALUES(col1) 
    , col2 = VALUES(col2); 

अगर वहाँ एक डिफ़ॉल्ट मान के बिना किसी भी अतिरिक्त NOT NULL स्तंभ हैं, तो आपको उन लोगों के लिए डमी मूल्य जोड़ने के लिए। बस उन्हें ON DUPLICATE KEY UPDATE से बाहर छोड़ दें और उन्हें अनदेखा कर दिया जाएगा।