2016-08-03 182 views
0

我有一个包含键/值列的表。我需要根据另一个值的条件更新一个键/值对。基于同一表中另一个字段的条件的表中的Mysql更新字段

表:

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

在这种情况下,我需要改变valuecanada其中key = privacy只有country = canada

我已经试过这样的事情:

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

,但它导致错误的CASE条件。我想我可能需要做某种子查询?

+0

您可以分享设置表以供参考。 – vickisys

+0

IF(value ='canada')THEN UPDATE settings SET value ='canada' WHERE key ='privacy' END IF; – Haris

回答

2

您的声明不起作用,因为您无法使用“隐私”和“国家/地区”的关键字创建记录。您需要在表格上执行SELECT以检查'country'是否设置为'canada'。像下面这样的东西可能会起作用。

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

除了我相信这是更好的做法,使用AND EXISTS(选择*从设置WHERE键='国家'AND值='加拿大'); – tomb

+0

你说得对。由于某种原因,我忘记了EXISTS存在。 –

+0

我收到了'错误:您无法在FROM子句中为更新指定目标表'设置'。 –

相关问题