クリーニングが必要な破損データがあります。データの現在の状態を考えると、どうすればこれを達成できますか?
Share テーブルは、Room テーブルを参照する外部キーを保持します。現在、Room テーブルに重複があります。多数の共有が 1 つのルームを指している場合がこれに当てはまります。ただし、各共有の Room テーブルにエントリがあるという状況です。部屋のエントリは同一であり、冗長なエントリを削除したいと考えています。明らかに、最初に行うことは、共有テーブル内の参照を修正することです。
冗長ルーム エントリ:
対応する共有エントリ:
すべての Share.room_id が Room テーブルの同じエントリを指すようにするにはどうすればよいですか? さまざまな Update ステートメントを試みましたが、成功しませんでした。Room エントリを指定しているため、次の Update ステートメントは意味がありません。これはもちろん機能しません。しかし、どうにかして 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ステートメントを投稿したかっただけです:
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);
非常に遅く、おそらく非常に非効率的ですが、実行する必要があるのは 1 回だけです。