いくつかのテーブルから一度に削除しようとしています。少し調べた結果、この方法が見つかりました
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_activities
pa...の近くで使用する正しい構文については、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 構文が役立ちます。IN
NOT IN
FROM
EXISTS