我有一个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
获取我的数组并将其插入表中,而不必编写循环并查询每个数组元素。
答案 0 :(得分:2)
当然它没有插入。由于没有这样的价值,它无法更新。
我认为您通过输入已存在的值来规范化数据库,现在想为每个有效值添加所需的映射。
所以最好从头开始做INSERT。
答案 1 :(得分:2)
如果Option_Id
是主键,这应该有效:
REPLACE INTO `Table` (`Option_Id`, `Column`) VALUES
(1, 'Apple'),
(2, 'Banana'),
(3, 'Q-Tip');
该语句表示:如果PK已存在,则插入给定行或替换值。
答案 2 :(得分:0)
您始终可以在数据库中查询条目,然后根据您的结果选择更新或插入
答案 3 :(得分:-1)
我认为这种更新没有意义 为什么没有带有选项ID和相应值的单独表格,只留下与此用户ID相关联的选项ID?