การอัปเดตหลายแถวด้วยค่าที่แตกต่างกันในการสืบค้นเดียว


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 นี้ คุณสามารถอธิบายได้ไหม: = IF (id = 1, ทำไมคุณต้องการสิ่งนี้?
3182468

4
ฉันจะใช้สิ่งนี้เพื่ออัปเดตบันทึกประมาณ 100k ในข้อความค้นหา sinle ได้หรือไม่
AMB

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
Juliano
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.