Estoy intentando eliminar de algunas tablas a la vez. Investigué un poco y se me ocurrió esto
DELETE FROM `pets` p,
`pets_activities` pa
WHERE p.`order` > :order
AND p.`pet_id` = :pet_id
AND pa.`id` = p.`pet_id`
Sin embargo, recibo este error.
Database_Exception no detectado [1064]: tiene un error en la sintaxis SQL; consulte el manual que corresponde a la versión de su servidor MySQL para conocer la sintaxis correcta para usar cerca de 'p,
pets_activities
pa ...
Nunca antes había hecho una eliminación de tablas cruzadas, ¡así que no tengo experiencia y estoy atascado por ahora!
¿Qué estoy haciendo mal?
SELECT
toma igualmente larga?Dado que esto parece ser una relación simple padre / hijo entre
pets
ypets_activities
, sería mejor crear su restricción de clave externa con una cascada de eliminación.De esa manera, cuando
pets
se elimina una fila, laspets_activities
filas asociadas a ella también se eliminan automáticamente.Entonces su consulta se vuelve simple:
fuente
pa
es un hijo propio dep
debido alid/pet_id
mapeo.Utilizar este
o
fuente
No tengo una base de datos mysql para probar en este momento, pero ¿ha intentado especificar qué eliminar antes de la cláusula from? Por ejemplo:
Creo que la sintaxis que usó se limita a las versiones más recientes de mysql.
fuente
La sintaxis me parece correcta ... intente cambiarla para usar
INNER JOIN
...Eche un vistazo a esto .
fuente
Para cualquiera que lea esto en 2017, así es como he hecho algo similar.
Generalmente, para eliminar filas de varias tablas, la sintaxis que sigo se proporciona a continuación. La solución se basa en el supuesto de que existe alguna relación entre las dos tablas.
fuente
Encontré este artículo que le muestra cómo eliminar datos de varias tablas utilizando la declaración MySQL DELETE JOIN con una buena explicación.
fuente