Erro de sintaxe DELETE mySQL

8 respostas
W

DELETE FROM usuario, fone, usuario_tem_fone, documento, responsavel, usuario_tem_responsavel WHERE usuario.id_usuario = usuario_tem_fone.usuario_id_usuario AND usuario.id_usuario = documento.usuario_id_usuario AND usuario.id_usuario = usuario_tem_responsavel.usuario_id_usuario AND usuario_tem_fone.fone_id_fone = fone.id_fone AND usuario_tem_responsavel.responsavel_id_resp = responsavel.id_resp;

Qual o erro nisso?

8 Respostas

drsmachado

Já tentou excluir os dados de 1 tabela por vez?

V

da um

V

from*

drsmachado

[quote=vinigess]da um

E o que ele faz com os relacionamentos, meu camarada?
As tabelas possuem constraints em foreign keys, pela forma como ele postou (usuario, fone, usuario_tem_fone).
O truncate vai esbarrar nestas constraints.
Aliás, a partir do momento em que ele colocou um WHERE na cláusula, significa que ele não quer apagar todas as tabelas, apenas remover registros.

W

[quote=drsmachado]

vinigess:
da um

E o que ele faz com os relacionamentos, meu camarada?
As tabelas possuem constraints em foreign keys, pela forma como ele postou (usuario, fone, usuario_tem_fone).
O truncate vai esbarrar nestas constraints.
Aliás, a partir do momento em que ele colocou um WHERE na cláusula, significa que ele não quer apagar todas as tabelas, apenas remover registros.

Exatamente. Quero apagar um determinado registro e todas os outros que tem relacionamento (contraints FK), não quero apagar tudo com Truncate!

[drsmachado] Sabe o que está errado na sintaxe do meu post?

drsmachado

Se eu estiver certo, é o fato de estar colocando mais de uma tabela na cláusula. A cláusula delete só suporte 1 tabela por vez. Tente assim

DELETE t1, t2 FROM t1 INNER JOIN t2 INNER JOIN t3
WHERE t1.id=t2.id AND t2.id=t3.id;

//ou

DELETE FROM t1, t2 USING t1 INNER JOIN t2 INNER JOIN t3
WHERE t1.id=t2.id AND t2.id=t3.id;

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

W

drsmachado:
Se eu estiver certo, é o fato de estar colocando mais de uma tabela na cláusula. A cláusula delete só suporte 1 tabela por vez. Tente assim

DELETE t1, t2 FROM t1 INNER JOIN t2 INNER JOIN t3
WHERE t1.id=t2.id AND t2.id=t3.id;

//ou

DELETE FROM t1, t2 USING t1 INNER JOIN t2 INNER JOIN t3
WHERE t1.id=t2.id AND t2.id=t3.id;

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

Não dá certo! Não é bem o que quero fazer. =S

drsmachado

Não é o que você quer fazer, é um caminho.
Crie Você está tentando remover os registros do usuário X. Assumindo que X = 34. Você precisa, primeiramente, apagar todos os registros do usuario nas tabelas de relacionamento, então, todos os registros do mesmo nas tabelas primárias.
Usando DELETE com INNER JOIN você consegue.

Criado 16 de maio de 2011
Ultima resposta 16 de mai. de 2011
Respostas 8
Participantes 3