[firebase-br] INNER JOIN X NOT EXIST

Nivaldo Martins nivaldomart em gmail.com
Qua Jan 6 04:01:20 -03 2010


Tentei analisar sua query e percebi que vc possui uma tabela cobranças onde
você lança registros relacionados com as parcelas em atraso. Se for isso ao
invés de fazer not Exists, que é extremamanete pesado, faça not in

em vez disso:

INNER JOIN COBRANCAS CO ON (CO.CODLOJA = P.CODLOJA)                \
                                                   AND
                                                  (CO.NUMREF = P.NUMREF)
                                                   AND
                                                   (CO.NUMPREST =
P.NUMPREST)    > O problema esta aqui!!!
                                                   AND
                                                  (CO.TIPO_COBRANCA in (1))

isso:

where p.numref (considerando que este campo é único para cada prestação
independente de cliente e loja)

              not in (
                       select
                           c.numref
                       from
                           cobrancas c
                       where
                           demais condições do join
                      )

desta forma ele só retornará os registros cujo o campo numref da parcela não
esteja na tabela cobranças, que ao que parece é o que você precisa, mas como
o colega colocou acima seja um pouco mais específico no que você precisa ou
reveja a modelagem destas tabelas. Quais as funcionalidades de cada uma?
principalmente da tabela cobranças. Vc colocou pouca informação sobre seu
modelo e sobre sua necessidade

Espero ter ajudado

Nivaldo Martins
Salvador - BA

2010/1/5 ericrodrigues <ericrodrigues1509 em gmail.com>

> Olá pessoal...
>
> estou com uma query aqui que eu estava usando not exist so que por causa da
> subquery estava ficando muito lento... ja cheguei esperar 1hr para os
> resultados
> por isso estou tentando usar o inner join pra resolver isso... no exemplo,
> estou buscando se encontrar na tabela COBRANCAS... mas se eu quizer buscar
> somente o que eu não encontrar???
>
> segue a query:
>
> SELECT
>  C.CPF_CNPJ,C.NOME,C.NUM_CARTAO,MIN(P.DTVENC) AS MENORDATA,
>  SUM(P.VLRPREST) AS SOMA,COUNT(P.CPF_CNPJ) AS TOTAL,C.ENDER,
>  C.BAIRRO,C.CIDADE,C.UF,C.CEP
> FROM CLIENTES C INNER JOIN PRESTACOES P ON (C.CPF_CNPJ = P.CPF_CNPJ)
>  AND (P.DTPAGTO IS NULL) AND (P.DTVENC < CURRENT_TIMESTAMP)
>
>  INNER JOIN COBRANCAS CO ON (CO.CODLOJA = P.CODLOJA)                \
>  AND (CO.NUMREF = P.NUMREF) AND (CO.NUMPREST = P.NUMPREST)    > O problema
> esta aqui!!!
>  AND (CO.TIPO_COBRANCA in (1))
> /
>
> WHERE P.DTVENC >= '10/1/2009' AND P.DTVENC <= '10/15/2009'
> GROUP BY
> C.CPF_CNPJ,C.NOME,C.NUM_CARTAO,C.ENDER,C.BAIRRO,C.CIDADE,C.UF,C.CEP
>
>
>
>
>
> ______________________________________________
> 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