【エラー解決方法】DELETE文にテーブルを結合時、エラーが出るのを解決する方法

こんにちは、松浦です。

先日、削除の条件に使いたくて、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」のところでエラーになっています。

エラー発生時の環境

エラー発生時の開発環境は以下のとおりです。

DB
MySQL
バージョン
10.1.10-MariaDB
OS
Windows 10 HOME

原因

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 = '肉食'
    )
;

まとめ

無事に削除できました。
副問い合わせを上手に活用できるとなんだかドヤりたくなります。
これで次回からはさくっと消します!

記事をシェア
MOST VIEWED ARTICLES