1. ホーム
  2. mysql

[解決済み] MySQLで複数のテーブルから削除する方法

2022-07-28 07:03:52

質問

いくつかのテーブルから一度に削除しようとしています。私は少し研究を行い、そしてこれを思いつきました。

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

しかし、次のようなエラーが発生します。

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

クロステーブルの削除は初めてなので、未熟で今のところ行き詰まっています

私は何を間違えているのでしょうか?

どうすればよいのでしょうか?

を使う 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 , IN , NOT IN といった具合です。 しかし、上のように、どのテーブルから削除するかを FROM 句の前にエイリアスを置いてどのテーブルから削除するかを指定することで、いくつかのかなり厳しい状況をより簡単に切り抜けられます。 私はしばしば EXISTS を使うことが多いのですが、1% の場合はこの MySQL 構文に軍配が上がります。