Estou tentando excluir algumas tabelas de uma vez. Eu fiz um pouco de pesquisa e descobri este
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 este erro
Não capturada Database_Exception [1064]: você tem um erro na sintaxe SQL; verifique o manual que corresponde à versão do seu servidor MySQL para a sintaxe correta para usar próximo a 'p,
pets_activities
pa ...
Eu nunca fiz uma exclusão de tabela cruzada antes, então sou inexperiente e estou preso por agora!
O que estou fazendo de errado?
SELECT
mesma forma?Visto que esta parece ser uma relação pai / filho simples entre
pets
epets_activities
, seria melhor criar sua restrição de chave estrangeira com uma cascata de exclusão.Dessa forma, quando uma
pets
linha é excluída, aspets_activities
linhas associadas a ela também são excluídas automaticamente.Então, sua consulta se torna simples:
fonte
pa
é um filho própriop
devido aoid/pet_id
mapeamento.Usa isto
ou
fonte
Não tenho um banco de dados mysql para testar no momento, mas você tentou especificar o que excluir antes da cláusula from? Por exemplo:
Acho que a sintaxe que você usou é limitada a versões mais recentes do mysql.
fonte
A sintaxe parece certa para mim ... tente alterá-la para usar
INNER JOIN
...Dê uma olhada nisso .
fonte
Para quem estiver lendo isso em 2017, é assim que fiz algo semelhante.
Geralmente, para excluir linhas de várias tabelas, a sintaxe que sigo é fornecida a seguir. A solução parte do pressuposto de que existe alguma relação entre as duas tabelas.
fonte
Eu encontrei este artigo que mostra como excluir dados de várias tabelas usando a instrução DELETE JOIN do MySQL com uma boa explicação.
fonte