Sql Delecao
Povo, o lance é o seguinte, preciso deletar registros em uma tabela com base no parameros em outra tabela.
Tenho uma tabela atendimento, essa tabela gera registros em uma segundat tabela chamada ParcelaAtendimento.Com isso para deletar os registros na tabela atendimento eu tenho de deletar primeiro os registros vinculados com a parcelaatendimento.So que nao estou conseguindo montar a Sql de deleção para esse caso.Sao chaves compostas o relacionamento, os campos ID e COD_LOJA.
Seria algo mais ou menos assim:
delete from parcelaatendimento P
inner JOIN atendimento A ON(A.ID = P.ID and A.Cod_Loja=P.Cod_Loja)
where (a.data_atend <´06/19/2004´ or a.data_atend > ´07/13/2004´> )
So que desse jeito o InterbAse da erro no Inner Join.Nao sei por que.
Alguem tem alguma solução pra isso?
Tenho uma tabela atendimento, essa tabela gera registros em uma segundat tabela chamada ParcelaAtendimento.Com isso para deletar os registros na tabela atendimento eu tenho de deletar primeiro os registros vinculados com a parcelaatendimento.So que nao estou conseguindo montar a Sql de deleção para esse caso.Sao chaves compostas o relacionamento, os campos ID e COD_LOJA.
Seria algo mais ou menos assim:
delete from parcelaatendimento P
inner JOIN atendimento A ON(A.ID = P.ID and A.Cod_Loja=P.Cod_Loja)
where (a.data_atend <´06/19/2004´ or a.data_atend > ´07/13/2004´> )
So que desse jeito o InterbAse da erro no Inner Join.Nao sei por que.
Alguem tem alguma solução pra isso?
Fred_montanha
Curtidas 0
Respostas
Emerson Nascimento
20/07/2004
assim deve funcionar (supondo que os campo de ligacao sejam numericos):
delete from parcelaatendimento
where cast(ID as char(10)) || cast(Cod_Loja as char(10)) in
  (select cast(a.ID as char(10)) || cast(a.Cod_Loja as char(10))
    from atendimento a
    where a.data_atend > ´06/19/2004´ and a.data_atend < ´07/13/2004´)
delete from parcelaatendimento
where cast(ID as char(10)) || cast(Cod_Loja as char(10)) in
  (select cast(a.ID as char(10)) || cast(a.Cod_Loja as char(10))
    from atendimento a
    where a.data_atend > ´06/19/2004´ and a.data_atend < ´07/13/2004´)
GOSTEI 0
Rafs
20/07/2004
Poste a mensagem de erro que ocorre, facilitará a compreensão do que poderá estar acontecendo.
Observação, a sua instrução SQL está com um caractere de maior ´>´ após a data ´07/13/2004´, acredito que isto tenha sido erro de digitação apenas aqui no forum.
Outra coisa, verifique se a construção das datas está correta, pois vc está selecionando todos os registros que estão com datas menores que 19/Jun/2004 e também maiores que ´13/Jul/2004´, não sería o oposto?!
Observação, a sua instrução SQL está com um caractere de maior ´>´ após a data ´07/13/2004´, acredito que isto tenha sido erro de digitação apenas aqui no forum.
Outra coisa, verifique se a construção das datas está correta, pois vc está selecionando todos os registros que estão com datas menores que 19/Jun/2004 e também maiores que ´13/Jul/2004´, não sería o oposto?!
GOSTEI 0
Paulo_amorim
20/07/2004
Olá
Até onde eu saiba, não existe inner join no DELETE...posso estar errado, mas acho que não aceita essa sintaxe não kra..
Daria pra fazer se o InterBase fizesse subselect, mas como não, vc precisa fazer 2 queries...
Se vc tiver controlando pelo Delphi, vc pode faer assim:
uma vc faz
dai pega o resultset e faz [i:91b818e5a9]while not EOF[/i:91b818e5a9]...
e poe a sintaxe de deleção
Espero queajude
Até+
Até onde eu saiba, não existe inner join no DELETE...posso estar errado, mas acho que não aceita essa sintaxe não kra..
Daria pra fazer se o InterBase fizesse subselect, mas como não, vc precisa fazer 2 queries...
Se vc tiver controlando pelo Delphi, vc pode faer assim:
uma vc faz
SELECT id, cod_loja FROM atendimento WHERE data_atend NOT BETWEEN :p1 AND :p2
dai pega o resultset e faz [i:91b818e5a9]while not EOF[/i:91b818e5a9]...
e poe a sintaxe de deleção
DELETE FROM parcelaatendimento WHERE id = :p1 AND cod_loja = :p2
Espero queajude
Até+
GOSTEI 0
Josemars
20/07/2004
Geralmente faço assiim. Arruma alguma forma do usuário capturar o número do antendimento.
Com isso faço o primeiro sql para delete o resgistros da tabela filho e depois denttro do mesma procedure, aproveito a variavel que está guardando o número do atendimento e faço a exclusão da tabela pai. Sempre tem dado certo .
Duvidas, josaudi@yahoo.com.br
Com isso faço o primeiro sql para delete o resgistros da tabela filho e depois denttro do mesma procedure, aproveito a variavel que está guardando o número do atendimento e faço a exclusão da tabela pai. Sempre tem dado certo .
Duvidas, josaudi@yahoo.com.br
GOSTEI 0