2011-12-01 15 views
9

मैं एक MySQL अद्यतन बयान एक मामला खंडMySQL मामला ... कहां ... तो बयान

UPDATE partsList SET quantity = 
CASE 
    WHEN partFK = 1 THEN 4 
    WHEN partFK = 2 THEN 8 
END 
WHERE buildFK = 1; 

ऊपर बयान काम करता है का उपयोग करता है। फिर भी जब जब बयान, यह टूट जाता है और मामला खंड कुछ भी नहीं लौटा रहा है त्रुटि को इंगित करता रहा से एक को हटा दें। क्या यह है कि कार्य करने के लिए CASE क्लॉज में एक से अधिक होना चाहिए।

मैं पहले से पता नहीं कि कितने अपडेट मैं की आवश्यकता होगी, तो मैं एक भी अद्यतन बयान है कि एक या कई अद्यतन संभाल कर सकते हैं का निर्माण करने की कोशिश कर रहा हूँ।

किसी भी अंतर्दृष्टि प्रदान कर सकते हैं के लिए धन्यवाद।

उत्तर

26

ऐसा नहीं है कि CASE में एक से अधिक, WHEN...THEN होना चाहिए, यह है कि इसे आपके द्वारा दी जाने वाली सभी तारीखों को संभालना होगा।

आप खंड में से एक को हटा दिया है, तो आप एक छेद छोड़ दें। जैसे

UPDATE partsList SET quantity = 
CASE 
    WHEN partFK = 1 THEN 4 
END 
WHERE buildFK = 1; 
इस अद्यतन बयान के साथ

, अगर parkFK 2 है, तो अद्यतन विफल रहता है क्योंकि मामला इनपुट नहीं संभाल सकते हैं।

आप या तो अपने स्रोत-खंड (उदा। AND partFK in (1,2)) पर एक और पंक्ति जोड़कर अपने स्रोत डेटा को सीमित कर सकते हैं, या आप केस अभिव्यक्ति में ELSE जोड़ सकते हैं।

UPDATE partsList SET quantity = 
CASE 
    WHEN partFK = 1 THEN 4 
    WHEN partFK = 2 THEN 8 
    ELSE 12 
END 
WHERE buildFK = 1; 

हालांकि, आपके द्वारा दिखाए गए SQL कथन के आधार पर, शायद एक बेहतर तरीका है। संभवतः, partFK किसी अन्य तालिका के लिए एक विदेशी कुंजी है। क्या आप वहां से quantity के लिए मूल्य खींच सकते हैं?

+0

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

+0

हां, 'ईएलएसई मात्रा' काम करना चाहिए। – recf

+1

बहुत बढ़िया, मेरे लिए इसे साफ़ करने के लिए धन्यवाद। और रिकॉर्ड के लिए, 'ईएलएसई मात्रा' काम किया था। – CDspace

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