我需要一个sql语句,如果该行存在,它将更新;如果该行不存在,则需要插入。我有一张有以下值的表格..。
id是(唯一+自动增量)
id | selectedID | userID | question
------------------------------------
1 | 1 | 3 | 10如果具有userID 3的用户为问题10选择了一个不同的selectedID (例如2),我希望将表更新到:
id | selectedID | userID | question
-----------------------------------
1 | 2 | 3 | 10如果userID 3的用户再次为问题10选择selectedID 2,我不希望它插入另一行。
如果id 3的用户为问题11选择了一个selectedID,我希望它插入一个新行,例如问题11的2行:
id | selectedID | userID | question
-----------------------------------
1 | 2 | 3 | 10
2 | 2 | 3 | 11发布于 2019-02-16 15:30:56
你在找insert on duplicate key update。
基本上,您希望组合(userId, questionId)是唯一的。首先设置一个唯一的约束/索引:
create unique index unq_t_userId_questionId on t(userId, questionId);然后将on duplicate key update用于插入:
insert into t (userId, questionId, selectedId)
values (@userId, @questionId, @selectedId)
on duplicate key update selectedId = values(selectedId);发布于 2019-02-16 15:36:11
您可以在mysql中使用上面的构造,如果存在密钥,如果没有找到主键,则更新记录。在甲骨文中有些合并。
如果在INSERT语句中指定ON重复键更新选项,而新行在唯一或主键索引中导致重复值,则MySQL将根据新值对旧行执行更新。
https://stackoverflow.com/questions/54724625
复制相似问题