[英]How can i only insert into a database if two inputs doesn't already exist?
[英]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 UPDATE
和REPLACE
,但是我找不到一種使用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.