【MySQL】共通のIDのデータを複数テーブルからDELETEする

MySQL

メインとしているマスタテーブルからDELETEを行った際に、
関連する他の複数のテーブルからも同時に共通のレコードの削除を行いたい時ってたまにあると思います。
そんな時にテーブル毎にSQLを実行せずとも一発でも掛けます。

実行環境
サーバの種類: MySQL
サーバのバージョン: 5.6.20

スポンサーリンク

共通IDサンプルテーブル

UserIdName
1山田
2田中
3佐藤
AutoIdTypeUserIdDate
1出勤12020/1/8 9:16:10
2出勤22020/1/8 10:20:11
3早退12020/1/8 15:16:06
4退勤22020/1/8 18:00:56
5出勤32020/1/9 9:00:51

左: M_UserData … 社員IDと名前を持つ  
右: T_TimeCard … 社員の出退勤のレコードを持つ

こんな感じのテーブルが有ったとして、この度山田さんが退職したとします。

テーブル個数分のDELETE

通常通りテーブル毎に消していく場合は、

DELETE FROM M_UserData WHERE UserId = 1;
DELETE FROM T_TimeCard WHERE UserId = 1;

当然これだけでOK。でも、もう少し複雑なテーブルだったりするとSQL作成して実行して~が結構面倒だし冗長になりがち。

一度のSQLでDELETE

そんな時はこうする↓

 DELETE

  User 
 ,Time 

 FROM M_UserData As User 

 LEFT JOIN T_TimeCard AS Time 
  ON User.UserId = Time.UserId 

 WHERE User.UserId = 1

すると両方のテーブルから山田さんレコードは抹消されます。
一つ注意としてDELETE~FROMの間のテーブル指定はテーブル名のM_UserDataやT_TimeCardとしてしまうと、
“Unknown table ‘M_UserData’ in MULTI DELETE”
とエラーが吐かれちゃう。

必ずエイリアスで記述しないとダメなのでお気を付けください(ᵔᴥᵔ)

コメント