簡體   English   中英

MySQL根據同一列中的值更新單個列上的多個行

[英]MySQL Update multiple rows on a single column based on values from that same column

我有一個如下所示的表:

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

34     age     10        0
35     age     80        0

要更新這些行,我必須使用以下內容:

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'

有沒有辦法將此合並到一個更新語句中,而不使用ID(不保證是相同的),例如(即使這不起作用)...

UPDATE `DemoGroup` 
SET `value`= CASE `value`
    WHEN 'm' THEN 'male',
    WHEN 'f' THEN 'female' END 
WHERE `value` = 'm' OR `value` = 'f'

如果我能弄清楚如何為每一行設置Order字段,那么更多的獎勵(但不是nesseary)...

你應該更新值不僅基於值的value而且基於key的值,否則你可以在key為'shirt-size'時將'm'更新為'male'。

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

MySQL確實有一個案例功能。 嘗試:

UPDATE DemoGroup SET `value` = 
CASE `value` WHEN 'm' THEN 'male'
WHEN 'f' THEN 'female'
WHEN '10' THEN '10-19'
WHEN '80' THEN '80-89' END;

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM