簡體   English   中英

如果更新多行時該行尚不存在,該如何插入?

[英]How can I insert a row if it doesn't already exist while updating multiple rows?

我有一個如下所示的MySQL查詢:

UPDATE `Table` SET `Column` = 
    CASE 
      WHEN `Option Id` = '1' THEN 'Apple'
      WHEN `Option Id` = '2' THEN 'Banana'
      WHEN `Option Id` = '3' THEN 'Q-Tip'
    END 

我的表格目前看起來像這樣:

Option Id | Column
        1 |      x
        2 |      x

我希望它導致:

Option Id | Column
        1 |  Apple
        2 | Banana
        3 |  Q-Tip

但是它不會插入Q-Tip行。 我查找並閱讀了一些有關INSERT ON DUPLICATE KEY UPDATEREPLACE ,但是我找不到一種使用CASE使其與多行更新一起工作的方法。 我是否必須為每一行編寫一個單獨的查詢才能使它工作,還是在MySQL中有一種不錯的方法呢?

Option Id本身不是Key ,但它是Primary Key一部分。

編輯更多信息:

我使用PHP進行編程,並且實質上是為用戶存儲一個數組。 Option Id是鍵, Column是值。 因此,為簡單起見,我的表可能如下所示:

User Id | Option Id | Value
     10 |         1 | Apple
     10 |         2 |  Shoe
     11 |         1 |  Czar
...

用戶可以輕松更新數組中的元素,並添加新的,然后POST數組服務器,我想在這種情況下,將其存儲在表中。 我上面的查詢更新了所有已編輯的數組元素,但沒有插入新的數組元素。 我想知道是否有一個查詢可以從POST獲取我的數組並將其插入表中,而無需我編寫循環並為每個數組元素查詢。

當然不會插入。 由於沒有這樣的值,因此無法更新。

我想您正在通過放入已經存在的值來規范化數據庫,現在想為每個有效值添加所需的映射。

因此,最好從頭開始,只做INSERT。

如果Option_Id是主鍵,這應該可以工作:

REPLACE INTO `Table` (`Option_Id`, `Column`) VALUES
(1, 'Apple'),
(2, 'Banana'),
(3, 'Q-Tip');

該語句的意思是:如果PK已經存在,則插入給定的行或替換值。

您總是可以查詢數據庫中的條目,然后根據您的結果選擇更新或插入

我認為這種更新毫無意義。
為什么您沒有一個單獨的表,其中包含選項ID和相應的值,而在此表中僅保留鏈接到用戶ID的選項ID?

暫無
暫無

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

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