Como excluir de várias tabelas no MySQL?

Eu estou tentando excluir algumas tabelas de uma só vez. Eu fiz um pouco de pesquisa, e surgiu com isso

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

No entanto, estou recebendo esse erro

Uncaught Database_Exception [1064]: Você tem um erro na sua syntax SQL; verifique o manual que corresponde à sua versão do servidor MySQL para a syntax correta para usar perto de ‘p, pets_activities pa …

Eu nunca fiz uma exclusão de tabela cruzada antes, então eu sou inexperiente e preso por agora!

O que estou fazendo de errado?

    Use um JOIN na instrução 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 

    Alternativamente, você pode usar …

     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 

    … para excluir apenas de pets_activities

    Veja http://dev.mysql.com/doc/refman/5.0/en/delete.html

    Para exclusões de tabela única, ainda com integridade referencial, existem outras maneiras de fazer com EXISTS, NOT EXISTS, IN, NOT IN, etc. Mas acima de onde você especifica quais tabelas excluir com um alias antes que a cláusula FROM possa obter você fora de alguns pontos bem apertados mais facilmente. Eu tenho a tendência de chegar a um EXISTS em 99% dos casos e, em seguida, há o 1% onde esta syntax do MySQL leva o dia.

    Como isso parece ser um relacionamento pai / filho simples entre pets e pets_activities , seria melhor criar sua restrição de chave estrangeira com uma cascata de exclusão.

    Dessa forma, quando uma linha de pets é excluída, as linhas pets_activities associadas a ela são automaticamente excluídas também.

    Então sua consulta se torna simples:

     delete from `pets` where `order` > :order and `pet_id` = :pet_id 

    Usa isto

     DELETE FROM `articles`, `comments` USING `articles`,`comments` WHERE `comments`.`article_id` = `articles`.`id` AND `articles`.`id` = 4 

    ou

     DELETE `articles`, `comments` FROM `articles`, `comments` WHERE `comments`.`article_id` = `articles`.`id` AND `articles`.`id` = 4 

    A syntax parece certa para mim … tente mudá-lo para usar o INNER JOIN …

    Dê uma olhada nisso: http://www.electrictoolbox.com/article/mysql/cross-table-delete/

    Eu não tenho um database mysql para testar no momento, mas você já tentou especificar o que excluir antes da cláusula from? Por exemplo:

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

    Eu acho que a syntax que você usou está limitada a versões mais novas do mysql.

    Para quem lê isso em 2017, foi assim que fiz algo parecido.

     DELETE pets, pets_activities FROM pets inner join pets_activities on pets_activities.id = pets.id WHERE pets.`order` > :order AND pets.`pet_id` = :pet_id 

    Geralmente, para excluir linhas de várias tabelas, a syntax que eu sigo é dada abaixo. A solução é baseada na suposição de que existe alguma relação entre as duas tabelas.

     DELETE table1, table2 FROM table1 inner join table2 on table2.id = table1.id WHERE [conditions]