[firebase-br] acho que é bug

Gladiston Santana gladiston em vidy.com.br
Ter Nov 20 12:52:18 -03 2012


para procurar pedidos que não tenham itens :

select * from pedidos a
where not exists(select * from pedidos_itens b where b.pedido=a.pedido)

Numa SP :
if not exists(select * from pedidos_itens where pedido=:p_pedido) then
begin
   exception ex_generic_error 'Este pedido não possui itens ! Não posso
prosseguir.'
   suspend;
  exit;
end;

exists é a melhor forma de lidar com subqueries que tratem com a existencia
de dados (ou não) porque a primeira ocorrência de valor a subquerie não
precisa continuar sua execução, por isso não precisa de distinct como voce
teve de fazer com o not in.

inte+

Em 20 de novembro de 2012 12:03, Jean Alysson <jeanpapa em gmail.com> escreveu:

> Olá Gladiston,
>
> eu uso muito o IN(), mas vendo seu comentário acho que vou mudar.
> uso sessa forma:
> monto a parte uma lista de codigos. Ex: codigos:= 1,2,3,4
> e monto um select via codigo direto no delphi:
>
> select * from pedidos where ie_cliente in (codigos)
> como eu faria usando o EXISTS() ?
>
> Obrigado
> Jean Alysson
>
> Em 20 de novembro de 2012 10:21, Gladiston Santana
> <gladiston em vidy.com.br> escreveu:
> > Independente do erro, acho que você deveria abandonar o NOT IN() e
> passar a
> > usar EXISTS() e NOT EXISTS(), é mais rápido e menos confuso e sem dizer
> que
> > é diferente do IN() que não tem limite de elementos.
> >
> > PS: Também acho que sua query tá errada, mas é dificil dizer quando não
> se
> > está ao vivo conectado em sua base para se conhecer as tabelas.
> >
> >
> > Em 19 de novembro de 2012 21:55, Samuel Peres Ferreira <
> > samuel.peres.ferreira em gmail.com> escreveu:
> >
> >> ola lista
> >>
> >>
> >> uso o fb 2.1
> >>
> >>
> >> tenho o seguinte sql:
> >>
> >> delete from cliente
> >>       where cliente not in
> >>                   (select distinct cliente (aqui deveria ser
> 'matricula')
> >>                            from lancamento)
> >>
> >>
> >> por erro meu, o correto é
> >>
> >> delete from cliente
> >>       where cliente not in
> >>                   (select distinct matricula
> >>                            from lancamento)
> >>
> >>
> >>
> >> na primeira opção, o fb executa e não da erro e não exclui nada.
> >> deveria dar erro de sintaxe.
> >>
> >> na segunda opção, executa corretamente.
> >>
> >> acho q é um bug do fb (seria o primeiro que descubro, depois de alguns
> >> anos).
> >>
> >> Samuel
> >>
> >> ______________________________________________
> >> FireBase-BR (www.firebase.com.br) - Hospedado em www.locador.com.br
> >> Para saber como gerenciar/excluir seu cadastro na lista, use:
> >> http://www.firebase.com.br/fb/artigo.php?id=1107
> >> Para consultar mensagens antigas: http://firebase.com.br/pesquisa
> >>
> > ______________________________________________
> > FireBase-BR (www.firebase.com.br) - Hospedado em www.locador.com.br
> > Para saber como gerenciar/excluir seu cadastro na lista, use:
> http://www.firebase.com.br/fb/artigo.php?id=1107
> > Para consultar mensagens antigas: http://firebase.com.br/pesquisa
>
>
>
> --
> Atenciosamente
> Jean Alysson Ambrosio
>
> ______________________________________________
> FireBase-BR (www.firebase.com.br) - Hospedado em www.locador.com.br
> Para saber como gerenciar/excluir seu cadastro na lista, use:
> http://www.firebase.com.br/fb/artigo.php?id=1107
> Para consultar mensagens antigas: http://firebase.com.br/pesquisa
>



Mais detalhes sobre a lista de discussão lista