MySQL で複数のテーブルから削除するにはどうすればいいですか? 質問する

MySQL で複数のテーブルから削除するにはどうすればいいですか? 質問する

いくつかのテーブルから一度に削除しようとしています。少し調べた結果、この方法が見つかりました

DELETE FROM `pets` p,
            `pets_activities` pa
      WHERE p.`order` > :order
        AND p.`pet_id` = :pet_id
        AND pa.`id` = p.`pet_id`

しかし、このエラーが発生します

キャッチされない Database_Exception [ 1064 ]: SQL 構文にエラーがあります。'p、pets_activitiespa...の近くで使用する正しい構文については、MySQL サーバーのバージョンに対応するマニュアルを確認してください。

これまでクロステーブル削除を実行したことがないので、経験不足で今のところ行き詰まっています。

何が間違っているのでしょうか?

ベストアンサー1

JOIN文中では を使用しますDELETE

DELETE p, pa
      FROM pets p
      JOIN pets_activities pa ON pa.id = p.pet_id
     WHERE p.order > :order
       AND p.pet_id = :pet_id

代わりに、以下を使用することもできます...

DELETE pa
      FROM pets_activities pa
      JOIN pets p ON pa.id = p.pet_id
 WHERE p.order > :order
   AND p.pet_id = :pet_id

...からのみ削除pets_activities

見るこれ

参照整合性を保ちながら単一テーブルを削除するには、、、、などを使用する他の方法があります。EXISTSただし、句の前にNOT EXISTS別名を使用して削除するテーブルを指定する上記の方法を使用すると、いくつかの非常に困難な状況からより簡単に抜け出すことができます。私はの 99% のケースで を使用する傾向があり、残りの 1% のケースではこの MySQL 構文が役立ちます。INNOT INFROMEXISTS

おすすめ記事