• Revista PROGRAMAR: Já está disponível a edição #53 da revista programar. Faz já o download aqui!

ht

Problema com DELETE

6 mensagens neste tópico

Boas a todos,

Gostaria, se possível, me ajudassem a resolver um problema com uma instrução sql no mysql 5.

Pretendo eliminar vários registos de várias tabelas através da seguinte instrução sql:

DELETE FROM fields, forms, actions

USING fields, forms, actions

WHERE fields.projectid = 26 AND

    forms.projectid = 26  AND actions.projectid = 26

Pretendo apagar os registos existentes nas tabelas acima referidas (fields, forms, actions), mas não consigo. Apenas elimina caso existam registos nas 3 tabelas,

caso só existir numa delas, já não apaga.. A query é executada, mas não apaga os registos.

Any help?

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

o mesmo que acontece com AND..

será que tenho de fazer join às tabelas??

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

boax...

Tas a ver mal o problema...

o teu codigo:

DELETE FROM fields, forms, actions

USING fields, forms, actions

WHERE fields.projectid = 26 AND

    forms.projectid = 26  AND actions.projectid = 26

vai apagar linhas. quais ao certo.. para saber faz:

Select * FROM fields, forms, actions
WHERE fields.projectid = 26 AND
    forms.projectid = 26  AND actions.projectid = 26

So vai apagar quando todas as tabelas tiverem o 26 ...

com o "or"... vai fazer um produto cartesiano, e vai apagar aquilo que nao pretendes....

Isto para dizer que para fazer este tipo de delete, tem de haver relacoes entre as tabelas ... que nao é o teu caso...

o que tu pretendes é fazer 3 deletes sobre 3 tabelas diferentes...

2 hiposteses:  fazer 3 queries .. em 1 ou 3 ligacoes a base de dados...

ou:

se as tabelas forem do tipo innodb, podes fazer transacoes, para que ou apague "tudo certinho" ou entao que nao apague nada...

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

pois.. se calhar o melhor é 3 queries.. mais simples e código mais organizado.

tive horas a tentar procurar informações/resolução sobre isto e encontrei uma aplicando o left join.. :wallbash: foi realmente desta vez que tirei as dúvidas que tinha sobre os joins...

eu gostaria de implementar isso com innodb, mas o meu receio é que caso o servidor mysql não tenha activo o suporte pra

esse motor e a aplicação deixa de funcionar devidamente..

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Boax...

A tua ideia incial, é mais utilizada quando temos por exemplo, 2 tabelas: 1 com o cabecalho do documento, e outra com as linhas.

E pretendemos eliminar tanto um documento como as respectivas linhas de rajada..

Ps..Claro que se poderia fazer por transacoes ou simplesmente, nao eliminar nunca registos...

ps2 ....  é so para os puristas de sql não me cairem em cima...  :P :biggrin: :P  :smoke:

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Crie uma conta ou ligue-se para comentar

Só membros podem comentar

Criar nova conta

Registe para ter uma conta na nossa comunidade. É fácil!


Registar nova conta

Entra

Já tem conta? Inicie sessão aqui.


Entrar Agora