2016-08-03 87 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子句中爲更新指定目標表'設置'。 –

相關問題