表中的Mysql更新字段基于同一表中的另一个字段的条件

时间:2016-08-03 21:13:08

标签: mysql

我有一个包含键/值列的表。我需要根据其他值的条件更新键/值对。

表:

--------------------------
| id | key     | value   |
--------------------------
| 1  | country | canada  |
| 2  | privacy | default |
--------------------------

在这种情况下,我需要将value更改为canada,其中key = privacy仅限country = canada

我尝试过这样的事情:

UPDATE settings
SET value =
    CASE
        WHEN key = 'country' AND value = 'canada' THEN 'canada'
        ELSE value
    END
WHERE key = 'privacy'

但会导致CASE条件出错。我想我可能需要做一些子查询?

1 个答案:

答案 0 :(得分:2)

您的陈述不会起作用,因为您无法获得“隐私”密钥的记录。和' country'。您需要在表格上执行SELECT以检查是否有国家/地区'被设定为加拿大'。以下内容可能有效。

UPDATE settings
SET value = 'canada'
WHERE key = 'privacy'
  AND EXISTS(SELECT * FROM (SELECT * FROM settings WHERE key = 'country' AND value = 'canada') AS temp_settings);