我有一些损坏的数据需要清理。鉴于数据的当前状态,我该如何做到这一点?
Share 表包含一个引用 Room 表的外键。目前,Room 表中有重复项。应该是多个 Share 指向一个 Room。但是,情况是每个共享的房间表中都有一个条目。Room 条目是相同的,我希望删除多余的条目。显然,首先要做的是更正 Share 表中的引用。
冗余房间条目: 对应的共享条目:
如何使所有 Share.room_id 指向 Room 表中的同一条目?我尝试了各种更新语句但没有成功。下面的 Update 语句没有意义,因为我指定了 Room 条目,这当然不起作用。但我必须以某种方式关闭 Room 表上的连接。
UPDATE share s
SET room_id = (SELECT DISTINCT MIN(s.room_id) FROM room r
WHERE s.room_id = r.id
GROUP BY ROLLUP(r.addition_id, r.area, r.first_effective_at))
任何建议将不胜感激。先感谢您。
只是想发布对我有用的更新声明:
UPDATE share s
SET room_id = (SELECT MIN(r.id) FROM room r
JOIN room r2
ON (r.addition_id = r2.addition_id
AND r.area = r2.area
AND r.first_effective_at = r2.first_effective_at
AND r.permanent_id = r2.permanent_id)
WHERE r2.id = s.room_id
GROUP BY r.addition_id, r.area, r.first_effective_at, r.permanent_id);
它超级慢,可能效率极低,但它只需要运行一次。