2012-01-03 20 views
0

私はSOを検索しましたが、多くの質問はテーブルを切り捨てることに関連していますが、テーブルを空にしたくないので、からすべて削除する必要がありますテーブル複数のクエリの代わりに1つのクエリを使用します。特定のIDですべてのテーブルから削除

これまでのところ、データベースに34個のテーブルがあり、要求されたときに特定のIDを持つすべての行を削除する必要があります。例:

DELETE FROM table1, table2 ... table33, table34 
WHERE customer_id = 4 

これを行うにはどうすればよいですか?別の考えでは、すべてのテーブルにcustomer_idと同じ行がない可能性があるので、IDが4のレコードがなくても削除する必要があります。

+0

すべてのテーブルは 'customer_id'列を持って行うことができますか? –

+0

どうしてそうする必要がありますか? – Lion

+0

私はサイトをクローンしているので、顧客IDを参照していますが、理由を説明することはできませんが、理由はすべてあります。私がクローンサイトを管理しているためにこれを行う必要がある理由は、私はそれらを無効にし、削除し、編集する権限があります。したがって、クローンサイトを削除すると、すべての行が顧客のIDに削除されます。 – MacMac

答えて

2

これが見つからない理由は、本当に必要なものではないからです。私はあなたが正しくforeign key constraintsを使用する必要はないので、これを行う方法があるとは思わない。これを維持する適切な方法は、外部キー制約を設定して、顧客ID(ex customer_purchase)を持つテーブルから、custom_idが主キーであるテーブルを指すようにすることです。 customer_idが主キーであるテーブルから顧客を削除すると、その顧客を参照する他のすべてのテーブルも削除されます。

私が今述べたものからの建物。多くの人が「ソフト」削除を選択します。ここでは、顧客テーブルにフラグを設定し、それが削除されると単に "1"に設定されます。これを行う理由は、監査能力の理由によるものです。たとえば、すべての購入の記録を残す必要があるとします。顧客が削除されてもこの状況では、ソフト削除を実行して、顧客が削除されたときに購入履歴からアイテムを失わないようにする必要があります。

1

これはあなたのための許容可能なソリューションであるかどうかは知りませんが、あなたは

DELETE t1, t2, ... FROM table1 t1, table2 t2, ... 
WHERE t1.customer_id = 4 AND t2.customer_id = 4 AND ... 
関連する問題