[firebase-br] Select com duplo JOIN

Eduardo Jedliczka (TeamFB) jedyfb em gmail.com
Ter Nov 15 21:03:31 -03 2005


Um banco de dados relacionais realiza suas operações baseado na teoria dos 
conjuntos, sendo assim, num produto cartesiano a quantidade de valores do 
elemento A sempre será igul a quantidade do elemento B.

Transforme eles em sub-selects, assim serão resolvidos em momento 
(conjuntos) diferentes, retornando assim os valores que você deseja...

Teste este exemplo...

SELECT
CL.CPF, CL.NOME,
(Select COUNT(R.CPF)  from CHEQEMITIDOS R where CL.CPF=R.CPF) as REC,
(Select COUNT(D.CPF) From CHEQDEV D where CL.CPF=D.CPF) as DEV
FROM CLIENTES CL
WHERE CL.CPF=:XCPF

Sucesso,

=========================
Eduardo Jedliczka
Membro do TeamFB - FireBase
Apucarana - Pr
=========================
----- Original Message ----- 
From: "Freitas - Protews" <benefreitas em terra.com.br>
To: "FireBase" <lista em firebase.com.br>
Sent: Tuesday, November 15, 2005 7:18 PM
Subject: [firebase-br] Select com duplo JOIN


Boa noite, lista!

Estou tentando o seguinte comando:

SELECT
CL.CPF, CL.NOME, COUNT(R.CPF) REC, COUNT(D.CPF) DEV
FROM CLIENTES CL
LEFT JOIN CHEQEMITIDOS R ON (CL.CPF=R.CPF)
LEFT JOIN CHEQDEV D ON (CL.CPF=D.CPF)
WHERE CL.CPF=:XCPF
GROUP BY CL.CPF, CL.NOME

Onde tenho uma tabela de Clientes, outra de cheques recebidos de clientes e 
outra de cheques devolvidos pelos clientes.
Estou tentando mostrar num único SELECT quantos cheques recebidos e quantos 
devolvidos tenho de um determinado cliente.
Recebo como resultado totais REC e DEV iguais caso um deles não seja zero. 
Exemplo: Um cliente com 2 cheques recebidos e um devolvido aparece com dois 
recebidos e dois devolvidos. Outro cliente com 3 recebidos e nenhum 
devolvido aparece certo. O que pode haver de errado?
Estou usando Firebird 1.5 com Delphi 6. Estou fazendo os testes com o 
IbExpert.

Um grande abraço a todos.

Freitas
______________________________________________
FireBase-BR (www.firebase.com.br) - Hospedado em www.bavs.com.br
Para editar sua configuração na lista, use o endereço 
http://mail.firebase.com.br/mailman/listinfo/lista_firebase.com.br
Para consultar mensagens antigas: http://firebase.com.br/pesquisa 





Mais detalhes sobre a lista de discussão lista