1461236502 MySQL



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

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

回答の条件
  • 1人1回まで
  • 登録:
  • 終了:2016/04/28 20:05:03
※ 有料アンケート・ポイント付き質問機能は2023年2月28日に終了しました。

回答2件)

id:a-kuma3 No.1

回答回数4974ベストアンサー獲得回数2154

ポイント50pt

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;
id:pogpi No.2

回答回数428ベストアンサー獲得回数59

ポイント50pt

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

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

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

コメントはまだありません

この質問への反応(ブックマークコメント)

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

回答リクエストを送信したユーザーはいません