एक क्वेरी में विभिन्न मानों के साथ कई पंक्तियों को अद्यतन करना


12

मैं यह समझने की कोशिश कर रहा हूं कि विभिन्न मूल्यों के साथ कई पंक्तियों को कैसे अपडेट किया जाए और मुझे यह नहीं मिला। समाधान हर जगह है लेकिन मेरे लिए इसे समझना मुश्किल है।

उदाहरण के लिए, 1 क्वेरी में दो अपडेट:

UPDATE mytable SET fruit='orange', drink='water', food='pizza' WHERE id=1;

UPDATE mytable SET fruit='strawberry', drink='wine', food='fish' WHERE id=2;

मुझे समझ में नहीं आता है कि कब .. क्या ... END काम करता है और इसका उपयोग कैसे करना है।

आश्चर्य है कि अगर कोई इस पर मेरी मदद कर सकता है।

जवाबों:


11
UPDATE mytable SET
    fruit = CASE WHEN id=1 THEN 'orange' ELSE 'strawberry' END,
    drink = CASE WHEN id=1 THEN 'water'  ELSE 'wine'       END,
    food  = CASE WHEN id=1 THEN 'pizza'  ELSE 'fish'       END
WHERE id IN (1,2);

व्यक्तिगत रूप से, प्रयोग CASE WHEN THEN ENDअनाड़ी लगता है।

आप IF फ़ंक्शन का उपयोग करके इसे कोड कर सकते हैं ।

UPDATE mytable SET
    fruit = IF(id=1,'orange','strawberry'),
    drink = IF(id=1,'water','wine'),
    food  = IF(id=1,'pizza','fish')
WHERE id IN (1,2);

कोशिश तो करो !!!

गुफा: CASE WHEN THEN ENDकेवल तभी काम करता है जब कई मूल्यों (2 से अधिक) के साथ काम कर रहा हो


अच्छा, मुझे इस IF फ़ंक्शन के बारे में पता नहीं था। क्या आप सिर्फ समझा सकते हैं: = यदि (आईडी = 1, आपको इसकी आवश्यकता क्यों है?
user3162468

4
मैं लगभग 100 k रिकॉर्ड करने के लिए यह प्रयोग कर सकता हूँ?
अंब

4

INSERT ... ON DUPLICATE KEY UPDATE

यदि आप दो से अधिक पंक्तियों को अपडेट करना चाहते हैं तो आपको बहुत ही जटिल परिस्थितियों को लिखना होगा। ऐसे मामले में आप INSERT ... ON DUPLICATE KEY UPDATEदृष्टिकोण का उपयोग कर सकते हैं ।

INSERT into `mytable` (id, fruit, drink, food)
VALUES
    (1, 'orange', 'water', 'pizza'),
    (2, 'strawberry', 'wine', 'fish'),
    (3, 'peach', 'jiuce', 'cake')
ON DUPLICATE KEY UPDATE
    fruit = VALUES(fruit), 
    drink = VALUES(drink), 
    food = VALUES(food);

3
ध्यान दें कि यह तालिका के लिए स्वतः संचय मूल्य को बढ़ाता है, यदि आप स्वप्रेरणा का उपयोग कर रहे हैं। उच्च थ्रूपुट तालिकाओं के लिए जो अवांछनीय हो सकते हैं। अधिक जानकारी stackoverflow.com/a/23517191/2560641
जूलियानो
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.