まず、1回限りのデータスクラビングの演習として、孤立した行を削除します。
DELETE
FROM ReferencingTable
WHERE NOT EXISTS (
SELECT *
FROM MainTable AS T1
WHERE T1.pk_col_1 = ReferencingTable.pk_col_1
);
次に、1回限りのスキーマ変更の演習として、ON DELETE CASCADE
を追加します。 参照テーブルの外部キーへの参照アクション。例:
ALTER TABLE ReferencingTable DROP
CONSTRAINT fk__ReferencingTable__MainTable;
ALTER TABLE ReferencingTable ADD
CONSTRAINT fk__ReferencingTable__MainTable
FOREIGN KEY (pk_col_1)
REFERENCES MainTable (pk_col_1)
ON DELETE CASCADE;
その後、永遠に、参照している行が削除されると、参照しているテーブルの行が自動的に削除されます。