Fórum Sql Delecao #243776

20/07/2004

0

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?


Fred_montanha

Fred_montanha

Responder

Posts

20/07/2004

Emerson Nascimento

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´)


Responder

Gostei + 0

20/07/2004

Rafs

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?!


Responder

Gostei + 0

20/07/2004

Paulo_amorim

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
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é+


Responder

Gostei + 0

21/07/2004

Josemars

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


Responder

Gostei + 0

Utilizamos cookies para fornecer uma melhor experiência para nossos usuários, consulte nossa política de privacidade.

Aceitar