我有一个外键表,我正在尝试合并重复记录。
我的表格如下:
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
))
答案 0 :(得分:2)
您可以使用
REPLACE INTO 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
这将删除在插入新行之前匹配的所有旧行。
合并两个对象时,是保留旧对象还是合并的对象,还是删除其中一个?如果删除合并到旧对象的新对象,则无需更新主键,因为旧对象引用仍然有效
答案 1 :(得分:0)
我想你想要
INSERT .... ON DUPLICATE KEY UPDATE"
http://dev.mysql.com/doc/refman/5.0/en/insert-on-duplicate.html