我有一个外键表,我正在尝试合并重复的记录。
我的表格如下所示:
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/