基于同一表中另一个字段的条件的表中的Mysql更新字段
我有一个包含键/值列的表。我需要根据另一个值的条件更新一个键/值对。基于同一表中另一个字段的条件的表中的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
条件。我想我可能需要做某种子查询?
您的声明不起作用,因为您无法使用“隐私”和“国家/地区”的关键字创建记录。您需要在表格上执行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);
除了我相信这是更好的做法,使用AND EXISTS(选择*从设置WHERE键='国家'AND值='加拿大'); – tomb
你说得对。由于某种原因,我忘记了EXISTS存在。 –
我收到了'错误:您无法在FROM子句中为更新指定目标表'设置'。 –
您可以分享设置表以供参考。 – vickisys
IF(value ='canada')THEN UPDATE settings SET value ='canada' WHERE key ='privacy' END IF; – Haris