mysql 使用 ON DUPLICATE KEY UPDATE 进行更新

标签 mysql replace duplicates unique-key

我有一个外键表,我正在尝试合并重复的记录。

我的表格如下所示:

user_id | object_id

该表是一个两列唯一键,因此不能重复。

我的查询如下所示:

UPDATE user_object SET object_id = merge_obj_id WHERE object_id = old_object_id

这工作正常,直到有用户附加到旧对象和 merged_object。这会导致重复。我陷入困境,我可以想办法通过多个查询和对象操作来做到这一点,但我真的很想在 SQL 中做到这一点。

更新: 这可能有用吗?

INSERT INTO user_object (user_id,merge_object_id) SELECT user_id FROM user JOIN
user_object ON user.user_id = user_object.user_id WHERE object_id = old_object_id ON
DUPLICATE KEY (DELETE user_object WHERE user_object.user_id = user_id AND
user_object.user_id = old_object_id);`

更新: 尝试过这个:

INSERT user_object(user_id,object_id) 选择 12345 作为 object_id,user.user_id 作为 user_id 来自用户 JOIN user_object ON user.user_id = user_object.user_id
其中 user_object.object_id = 23456

但它给了我这个错误:

无法添加或更新子行:外键约束失败 (yourtable.user_object, CONSTRAINT FK_user_object_user_idx FOREIGN KEY ( user_id) 引用 user (user_id))

最佳答案

你可以使用

替换为 user_object(user_id,object_id) SELECT 12345 as object_id, user.user_id as user_id FROM user JOIN user_object ON user.user_id = user_object.user_id 其中 user_object.object_id = 23456

这将在插入新行之前删除所有匹配的旧行。

合并两个对象时,您会同时保留旧对象和合并后的对象,还是删除其中之一?如果删除合并到旧对象中的新对象,则无需更新主键,因为旧对象引用仍然有效

关于mysql 使用 ON DUPLICATE KEY UPDATE 进行更新,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9540270/

相关文章:

mysql - 如何实现连接运算符

php - 我该怎么做这个查询?

MySQL更新问题

mysql - 改善MySQL SELECT性能

javascript - 如何在 JavaScript 正则表达式中用 (n-1) 次出现的相同字符替换 (n) 次出现的字符

r - 在 R 中使用矩阵替换函数时出现问题

matlab - 替换矩阵中的所有数字

SQL:如何将 ID 附加到具有重复值的行

sql - 从具有另一个表外键的表中删除重复行?

java - 如何不允许将重复项添加到二叉搜索树中?