お知らせ
2023.12.5(Tue)
目次
こんにちは、松浦です。
先日、削除の条件に使いたくて、DELETE文にテーブルを結合したらエラーになりました。
こんなテーブルがあったとして、ここからjunin_detailテーブルのカラムであるtypeが「肉食」となるデータをjuninテーブルから削除しようとして、
DELETE FROM junin INNER JOIN junin_detail ON junin_detail.junin_id = junin.junin_id WHERE junin_detail.type = '肉食' ;
素直にこう書いたらエラー・・・。
#1064 – You have an error in your SQL syntax; check the manual that corresponds to your MariaDB
server version for the right syntax to use near ‘INNER JOIN
junin_detail
ON junin_detail.junin_id = junin.junin_id
WHE’ at line 4
「INNER JOIN」のところでエラーになっています。
エラー発生時の開発環境は以下のとおりです。
MySQLでは、DELETE文にJOINでテーブルを結合することができない。
SELECTやUPDETEのようにはいかないのですね……。
SQL severでは、すこし書き方を変えることでJOINできるようです。
JOINを使わず、条件内で副問い合わせを行うことで解決しました。
副問い合わせ内でtypeが「肉食」となるデータのjunin_idを抽出し、削除の条件としています。簡単!
DELETE FROM junin WHERE junin_id IN ( SELECT junin_id FROM junin_detail WHERE junin_detail.type = '肉食' ) ;
無事に削除できました。
副問い合わせを上手に活用できるとなんだかドヤりたくなります。
これで次回からはさくっと消します!