1. ホーム
  2. mysql

SQL DELETEでWHERE条件のために別のテーブルをJOINした場合

2023-10-28 11:13:43

質問

から行を削除する必要があります。 guide_category とは関係のない guide テーブルとの関係がない(デッドリレーション)。

以下は私がやりたいことですが、もちろんうまくいきません。

DELETE FROM guide_category AS pgc 
 WHERE pgc.id_guide_category IN (SELECT id_guide_category 
                                   FROM guide_category AS gc
                              LEFT JOIN guide AS g ON g.id_guide = gc.id_guide
                                  WHERE g.title IS NULL)

エラーです。

FROM句で更新対象のテーブル'guide_category'を指定することはできません。

どのように解決するのですか?

ロックの実装の問題によるものです。 MySQL では影響を受けるテーブルを参照することができません。 DELETE または UPDATE .

を作る必要があります。 JOIN を作る必要があります。

DELETE  gc.*
FROM    guide_category AS gc 
LEFT JOIN
        guide AS g 
ON      g.id_guide = gc.id_guide
WHERE   g.title IS NULL

を使うか、あるいは NOT IN :

DELETE  
FROM    guide_category AS gc 
WHERE   id_guide NOT IN
        (
        SELECT  id_guide
        FROM    guide
        )