我有一些需要清理的損壞數據。考慮到數據的當前狀態,我怎麼能做到這一點?更新不正確的外鍵?
共享表包含引用房間表的外鍵。目前房間表中有重複。應該是許多股票指向一個房間的情況。但是,情況是每個股票的房間表中都有一個條目。房間條目是相同的,我希望刪除冗餘條目。很顯然,首先要做的是糾正Share表中的引用。
冗餘房項目: 通訊分享條目:
如何讓所有的Share.room_id的角度,從房間表相同的進入?我嘗試過各種Update語句,但沒有成功。以下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);
這是超級慢,可能是非常低效的,但它只需要運行一次。
那麼,什麼是在房間的唯一關鍵?顯然它不是ID - 這顯然只是一個(無用的)合成主鍵。那麼,我們如何才能知道ROOMS中的哪些行是duff和哪些是猶太潔食? – APC 2013-03-15 15:22:12
嗡嗡聲。我的道歉,我不認爲我的迴應會回答你的問題。 Room中的外鍵Addition_Id指向Building_Addition表中的條目。 Building_Addition表具有對建築物表格的引用。但是,我並不關心使用哪個匹配的房間條目。 – Ken 2013-03-15 16:05:10
我確實忽略了我發佈的示例數據中的列。房間表中有一個permanent_id列。 – Ken 2013-03-15 16:21:09