[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