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;
jobと、addressに外部キー制約を付けて、on delete cascadeも付けておけば、nameから消すだけでjobとaddressの該当するレコードも消すことができます。
次のようにすれば外部キー制約を追加できますね。
alter table job add foreign key (key) references name (ID) on delete cascade
コメント(0件)