人力検索はてな
モバイル版を表示しています。PC版はこちら
i-mobile

MySQL


複数のテーブルがあります。写真※

nameというテーブルのID 235をキーとして、
テーブル job や address のkeyが235も同時に削除するSQLは何になりますか?

1461236502
●拡大する

●質問者: webtomake
●カテゴリ:ウェブ制作
○ 状態 :終了
└ 回答数 : 2/2件

▽最新の回答へ

1 ● a-kuma3
●50ポイント

MySQL には、複数テーブルを削除する構文があります。
https://dev.mysql.com/doc/refman/5.6/ja/delete.html#idm140241509466848
https://dev.mysql.com/doc/refman/5.6/ja/delete.html#idm140241509347024

こんな感じになると思います。

DELETE n, j, a FROM name AS n, job AS j, address AS a
 WHERE n.id = 235 AND n.id = j.key AND n.id = a.key;

でも、テーブル name からの抽出条件が複雑でない限りは、ひとつのトランザクションで 3回 DELETE の SQL を出して、一回 commit の方が素直だと思います。

ただ、こんな感じで、複雑な条件を 2回も副問い合わせした上に削除する順番も気にするとか、考えたくないので、

DELETE job
 WHERE key in (SELECT n.id FROM name AS n WHERE n.id < 10000 AND n.reg_date < date('2010-01-01') AND ...);
DELETE address
 WHERE key in (SELECT n.id FROM name AS n WHERE n.id < 10000 AND n.reg_date < date('2010-01-01') AND ...);
DELETE name WHERE id < 10000 AND reg_date < date('2010-01-01') AND ...;

ひとつにすると、すっきりする、というのはあります。

DELETE n, j, a FROM name AS n, job AS j, address AS a
 WHERE n.id < 10000 AND n.reg_date < date('2010-01-01') AND ...
 AND n.id = j.key AND n.id = a.key;

2 ● pogpi
●50ポイント

jobと、addressに外部キー制約を付けて、on delete cascadeも付けておけば、nameから消すだけでjobとaddressの該当するレコードも消すことができます。

次のようにすれば外部キー制約を追加できますね。

alter table job add foreign key (key) references name (ID) on delete cascade

関連質問

●質問をもっと探す●



0.人力検索はてなトップ
8.このページを友達に紹介
9.このページの先頭へ
対応機種一覧
お問い合わせ
ヘルプ/お知らせ
ログイン
無料ユーザー登録
はてなトップ