MySQL根据同一列中的值更新单个列上的多个行

Sch*_*man 7 mysql entity-attribute-value

我有一个如下所示的表:

ID     Key     Value     Order
1      gender  m         0
2      gender  f         0

34     age     10        0
35     age     80        0
Run Code Online (Sandbox Code Playgroud)

要更新这些行,我必须使用以下内容:

UPDATE `DemoGroup` SET `value` = 'male' WHERE `value` = 'm'
UPDATE `DemoGroup` SET `value` = 'female' WHERE `value` = 'f'
UPDATE `DemoGroup` SET `value` = '10-19' WHERE `value` = '10'
UPDATE `DemoGroup` SET `value` = '80-89' WHERE `value` = '80'
Run Code Online (Sandbox Code Playgroud)

有没有办法将此合并到一个更新语句中,而不使用ID(不保证是相同的),例如(即使这不起作用)...

UPDATE `DemoGroup` 
SET `value`= CASE `value`
    WHEN 'm' THEN 'male',
    WHEN 'f' THEN 'female' END 
WHERE `value` = 'm' OR `value` = 'f'
Run Code Online (Sandbox Code Playgroud)

如果我能弄清楚如何为每一行设置Order字段,那么更多的奖励(但不是nesseary)...

Bil*_*win 14

您应该更新值不仅基于值value而是基于值key,否则您可以在键为"衬衫大小"时将"m"更新为"男性".

UPDATE `DemoGroup` 
SET `value` = CASE 
    WHEN (`key`, `value`) = ('gender', 'm') THEN 'male'
    WHEN (`key`, `value`) = ('gender', 'f') THEN 'female'
    WHEN (`key`, `value`) = ('age', '10')   THEN '10-19'
    WHEN (`key`, `value`) = ('age', '80')   THEN '80-89'
    ELSE `value` -- no-op for other values
  END 
WHERE `key` IN ('gender','age');
Run Code Online (Sandbox Code Playgroud)