在一个查询中更新具有不同值的多行


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;

我不了解CASE WHEN .. THEN ... END的工作原理以及如何使用它。

想知道是否有人可以帮助我。

Answers:


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);

试试看 !!!

CAVEAT:CASE WHEN THEN END仅在处理多个值(大于2)时方便


很好,我不知道这个IF函数。您能解释一下:= IF(id = 1,为什么需要这个?
user3162468 2014年

4
我可以用它来更新单查询中的约10万条记录吗?
2015年

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
朱利诺
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.