[firebase-br] Duvida em Left Outer Join

Antonio Carlos a.lima.silva em terra.com.br
Qui Mar 10 17:42:16 -03 2005


Select MF.Numero, MF.NumDoc, MF.NumParcela, MF.VrDeb, MF.Data, MF.DtVenc,
MF.CodCli, C.Nome, C.Cidade, C.ContaCtb
from MovFinanc MF ,  Cliente C on C.Codigo = MF.CodCli where not exists


( select 1 from MovFinanc MF2
where  MF2.Numero = MF.Numero
and MF2.NumDoc = MF.NumDoc
and MF2.NumParcela = MF.NumParcela
and MF2.CodCli = MF.CodCli
and MF2.VrCredito is not Null  )


and MF.Data <= '01/31/2005' ... Order by C.Nome

Desculpe a intromissão mas esse select é possivel em qual FB no 1.5 ? Pelo
que entendi ( desculpe se estiver falando bobagem ), o alias MF e MF2 são da
mesma tabela ? mas dentro do segundo select ele á apenas MF2 como o
interpretador SQL vai saber ? Seria pelo select 1 ( 1 do primeiro select ? )
se é a mesma tabela não seria mais fácil algo menos complexo ?
Por exemplo se vc ao inves de criar um registro NOVO para o crédito,
alterasse o de debito seria mais fácil pois bastaria um

Select MF.Numero, MF.NumDoc, MF.NumParcela, MF.VrDeb, MF.Data, MF.DtVenc,
MF.CodCli, C.Nome, C.Cidade, C.ContaCtb
from MovFinanc MF ,  Cliente C
WHERE  C.Codigo = MF.CodCli
and MF.VrCredito IS Null
and MF.Data <= '01/31/2005'
and MF.CodCli = 1640
Order by C.Nome

Creio que o erro seja porque mesmo que voce tenha um lancamento de crédito,
sempre vai haver um de debito com o CAMPO crédito nulo.

Antonio Carlos

> PHA,
>
> ele continua retornando mesmo com o exemplo abaixo (incluindo o
> MF2.VrCredito is not Null)
>
> Retornou... (Maldito)
>
> DtEmissao    Cliente   VrDebito   VrCredito  Vencimento   Numero Parcela
> 16/12/2004    1640      490,80                      14/01/2005    49201
1
>
> A tabela está assim:
>
> DtEmissao   Cliente  VrDebito  VrCredito   Vencimento  Numero Parcela
> 16/12/2004  1640       490,80                    14/01/2005   49201   1
> 16/12/2004  1640                       490,80    20/01/2005   49201   1
>
> Não quero que retorna nada.
>
> Eu não tenho chave-primária(PK) nesta tabela.
>
> Mesmo com o select abaixo (teoricamente) tem que funcionar, está muito
> lógico.
>
> Eu não sei mais o que fazer.... Será que a minha base está com algum
> problema?
>
> Obrigado,
>
> > Tem outras formas.
> >
> > Select MF.Numero, MF.NumDoc, MF.NumParcela, MF.VrDeb, MF.Data,
> >  MF.DtVenc, MF.CodCli, C.Nome, C.Cidade, C.ContaCtb
> >  from MovFinanc MF
> > Left Outer Join Cliente C on C.Codigo = MF.CodCli
> > where not exists
> >    (select 1 from MovFinanc MF2
> >     where  MF2.Numero = MF.Numero
> >         and MF2.NumDoc = MF.NumDoc
> >         and MF2.NumParcela = MF.NumParcela
> >         and MF2.CodCli = MF.CodCli
> >         and MF2.VrCredito is not Null )   <-- AQUI
> >
> >    and MF.Data <= '01/31/2005' and MF.VrDeb is not Null
> >    and MF.CodCli = 1640
> >
> > Order by C.Nome
> >
> > Tem outras forma, você pode fazer um Sum do Debito e do Credito e trazer
> somente os diferentes.
> >
> > Observação: Não analisei as suas chaves apenas alterei o exemplo do
> Eduardo.
> >
> > PHA
> > Nova Odessa / SP - Brazil
> > -----Mensagem original-----
> > From: "Carvalho" carvalho em invitro.com.br
> > Date: Thu, 10 Mar 2005 16:38:22 -0300
> > To: "FireBase" lista em firebase.com.br
> > Subject: Re: [firebase-br] Duvida em Left Outer Join
> >
> > > PHA,
> > >
> > > Mesmo com o exemplo abaixo ele está retornando assim:
> > >
> > > DtEmissao    Cliente   VrDebito   VrCredito  Vencimento   Numero
Parcela
> > > 16/12/2004    1640      490,80                      14/01/2005
49201
> 1
> > >
> > > A tabela está assim:
> > >
> > > DtEmissao   Cliente  VrDebito  VrCredito   Vencimento  Numero Parcela
> > > 16/12/2004  1640       490,80                    14/01/2005   49201
1
> > > 16/12/2004  1640                       490,80    20/01/2005   49201
1
> > >
> > > Eu não quero que retorna nada.
> > >
> > > Somente quando houver Débitos sem Créditos.
> > >
> > > Detalhe utilizo Interbase 6 com IBX
> > >
> > > O que fazer?
> > >
> > > Obrigado
> > >
> > >
> > >
> > > > O Fisrt 1 e desnecessario já que a funcao Exists não retorna dados
> nenhum,
> > > apemas um valor logico indicando se ha registros ou nao.
> > > >
> > > > Poderia ser assim, o resultado seria o mesmo.
> > > >
> > > > Select MF.Numero, MF.NumDoc, MF.NumParcela, MF.VrDeb, MF.Data,
> > > > MF.DtVenc, MF.CodCli, C.Nome, C.Cidade, C.ContaCtb
> > > > from MovFinanc MF
> > > > Left Outer Join Cliente C on C.Codigo = MF.CodCli
> > > > where not exists
> > > >   (select 1 from MovFinanc MF2
> > > >    where  MF2.Numero = MF.Numero
> > > >        and MF2.NumDoc = MF.NumDoc
> > > >        and MF2.NumParcela = MF.NumParcela
> > > >        and MF2.CodCli = MF.CodCli
> > > >        and MF2.vrDeb is Null )
> > > >
> > > >   and MF.Data <= '01/31/2005' and MF.VrDeb is not Null
> > > >   and MF.CodCli = 1640
> > > >
> > > > Order by C.Nome
> > > >
> > > >
> > > > PHA
> > > > Nova Odessa / SP - Brazil
> > > > -----Mensagem original-----
> > > > From: "Eduardo Jedliczka" eduardo em gerasoft.com.br
> > > > Date: Thu, 10 Mar 2005 15:58:28 -0300
> > > > To: "FireBase" lista em firebase.com.br
> > > > Subject: Re: [firebase-br] Duvida em Left Outer Join
> > > >
> > > > > Mas e o exemplo de cima (sem o first 1) não funcionou ??? Se não
> func>
> > > ionou
> > > > > aposto que você deve ter esquecido alguma coisa...
> > > > >
> > > > > [s]
> > > > >
> > > > > =========================> =
> > > > > Eduardo Jedliczka
> > > > > Gerasoft Informática
> > > > > Apucarana - Pr
> > > > > =========================> =
> > > > >
> > > > > ----- Original Message -----
> > > > > From: "Carvalho" <carvalho em invitro.com.br>
> > > > > To: "FireBase" <lista em firebase.com.br>
> > > > > Sent: Thursday, March 10, 2005 3:50 PM
> > > > > Subject: Re: [firebase-br] Duvida em Left Outer Join
> > > > >
> > > > >
> > > > > > Caro Eduardo,
> > > > > >
> > > > > > No Interbase 6 eu não posso utilizar First 1.
> > > > > >
> > > > > > Eu também não quero que retorna nada( isso no exemplo de dados
> abai>
> > > xo),
> > > > > onde
> > > > > > eu tenho um registro matando o outro.
> > > > > >
> > > > > > Eu só quero que traga registros de débitos que ainda não possuam
>
> > > registros
> > > > > > de crédito em uma determinada data e de um determinatdo cliente
> > > > > >
> > > > > > Ok?
> > > > > >
> > > > > > Obrigado,
> > > > > >
> > > > > > Carvalho
> > > > > >
> > > > > > ----- Original Message -----
> > > > > > From: "Eduardo Jedliczka" <eduardo em gerasoft.com.br>
> > > > > > To: "FireBase" <lista em firebase.com.br>
> > > > > > Sent: Thursday, March 10, 2005 3:33 PM
> > > > > > Subject: Re: [firebase-br] Duvida em Left Outer Join
> > > > > >
> > > > > >
> > > > > > dá uma olhada assim...
> > > > > >
> > > > > > Select MF.Numero, MF.NumDoc, MF.NumParcela, MF.VrDeb, MF.Data,
> > > > > > MF.DtVenc, MF.CodCli, C.Nome, C.Cidade, C.ContaCtb
> > > > > > from MovFinanc MF
> > > > > > Left Outer Join Cliente C on C.Codigo = MF.CodCli
> > > > > > where not exists
> > > > > > (select First 1 MF2.Numero from MovFinanc MF2
> > > > > >  where
> > > > > >   MF2.Numero = MF.Numero
> > > > > >   and MF2.NumDoc = MF.NumDoc
> > > > > >   and MF2.NumParcela = MF.NumParcela
> > > > > >   and MF2.CodCli = MF.CodCli
> > > > > >   and MF2.vrDeb is Null )
> > > > > > and MF.Data <= '01/31/2005' and MF.VrDeb is not Null
> > > > > > and MF.CodCli = 1640
> > > > > > Order by C.Nome
> > > > > >
> > > > > > Se não funcionar, faz assim para consultar: (e veja o resultado
do
> > > > > > totalCredito)
> > > > > >
> > > > > > Select MF.Numero, MF.NumDoc, MF.NumParcela, MF.VrDeb, MF.Data,
> > > > > > MF.DtVenc, MF.CodCli, C.Nome, C.Cidade, C.ContaCtb,
> > > > > > (select Sum(MF2.vrCred) from MovFinanc MF2
> > > > > >  where
> > > > > >   MF2.Numero = MF.Numero
> > > > > >   and MF2.NumDoc = MF.NumDoc
> > > > > >   and MF2.NumParcela = MF.NumParcela
> > > > > >   and MF2.CodCli = MF.CodCli
> > > > > >   and MF2.vrDeb is Null) as TotalCredito
> > > > > > from MovFinanc MF
> > > > > > Left Outer Join Cliente C on C.Codigo = MF.CodCli
> > > > > > and MF.Data <= '01/31/2005' and MF.VrDeb is not Null
> > > > > > and MF.CodCli = 1640
> > > > > > Order by C.Nome
> > > > > >
> > > > > > [s]
> > > > > >
> > > > > > ========================> ==
> > > > > > Eduardo Jedliczka
> > > > > > Gerasoft Informática
> > > > > > Apucarana - Pr
> > > > > > ========================> ==
> > > > > >
> > > > > > ----- Original Message -----
> > > > > > From: "Carvalho" <carvalho em invitro.com.br>
> > > > > > To: "FireBase" <lista em firebase.com.br>
> > > > > > Sent: Thursday, March 10, 2005 2:48 PM
> > > > > > Subject: Re: [firebase-br] Duvida em Left Outer Join
> > > > > >
> > > > > >
> > > > > > > Caro Eduardo,
> > > > > > >
> > > > > > > Segui o seu exemplo com algumas modificações, mas mesmo assim
> con>
> > > tinua
> > > > > > > retornando um registro.
> > > > > > >
> > > > > > > Veja como eu fiz:
> > > > > > >
> > > > > > > Select MF.Numero, MF.NumDoc, MF.NumParcela, MF.VrDeb, MF.Data,
> > > > > > > MF.DtVenc, MF.CodCli, C.Nome, C.Cidade, C.ContaCtb from
> MovFinanc MF
> > > > > > > Left Outer Join Cliente C on C.Codigo = MF.CodCli
> > > > > > >
> > > > > > > where not exists
> > > > > > > (select MF2.Numero from MovFinanc MF2
> > > > > > >  where
> > > > > > >   MF2.Numero = MF.Numero
> > > > > > >   and MF2.NumDoc = MF.NumDoc
> > > > > > >   and MF2.NumParcela = MF.NumParcela
> > > > > > >   and MF2.CodCli = MF.CodCli and MF2.vrcred is not null)
> > > > > > >
> > > > > > > and MF.Data <= '01/31/2005' and MF.VrDeb is not Null
> > > > > > > and MF.CodCli = 1640
> > > > > > > Order by C.Nome
> > > > > > >
> > > > > > > Continua retornando assim:
> > > > > > >
> > > > > > > DtEmissao     Cliente    VrDebito   VrCredito   Vencimento
> Numero
> > > > > > Parcela
> > > > > > > 16/12/2004    1640         490,80
> 14/01/2005
> > > > > > 49201
> > > > > > > 1
> > > > > > >
> > > > > > > a tabela está assim:
> > > > > > >
> > > > > > > DtEmissao     Cliente    VrDebito   VrCredito   Vencimento
> Numero
> > > > > > Parcela
> > > > > > > 16/12/2004    1640         490,80
> 14/01/2005
> > > > > > 49201
> > > > > > > 1
> > > > > > > 16/12/2004    1640                           490,80
> 20/01/2005
> > > > > > 49201
> > > > > > > 1
> > > > > > >
> > > > > > > Eu não quero que retorna nada.
> > > > > > >
> > > > > > > Detalhe utilizo Interbase 6 com IBX
> > > > > > >
> > > > > > >
> > > > > > >
> > > > > > >
> > > > > > >
> > > > > > > Carvalho, seu problema é de lógica...
> > > > > > >
> > > > > > > O Left Outer Join, vai trazer os que tem e os que não tem
> lançame>
> > > ntos...
> > > > > > > hehehe...
> > > > > > >
> > > > > > > O Mais certo seria utilizar um "Exists"...
> > > > > > >
> > > > > > > Select dados_da_nota from tabela A
> > > > > > > where not exists ( select first 1 qualquercoisa from tabela B
> where
> > > > > > > A.dtEmissao=B.dtEmissao and A.OutrosCampos=B.outrosCampos)
> > > > > > >
> > > > > > > Naturalmente o select acima não funciona, mas dá para
> entender...
> > > > > > >
> > > > > > > [s]
> > > > > > >
> > > > > > > =======================> ===
> > > > > > > Eduardo Jedliczka
> > > > > > > Gerasoft Informática
> > > > > > > Apucarana - Pr
> > > > > > > =======================> ===
> > > > > > >
> > > > > > > ----- Original Message -----
> > > > > > > From: "Carvalho" <carvalho em invitro.com.br>
> > > > > > > To: <lista em firebase.com.br>
> > > > > > > Sent: Thursday, March 10, 2005 12:37 PM
> > > > > > > Subject: [firebase-br] Duvida em Left Outer Join
> > > > > > >
> > > > > > >
> > > > > > > In Vitro Diagnóstica S/A
> > > > > > > Caros colaboradores,
> > > > > > >
> > > > > > > Bom dia!
> > > > > > >
> > > > > > > Estou tentando fazer um select para retornar somente registros
> em
> > > abe> rto
> > > > > > > baseado no campo DtEmissao e que não tenha um registro de
> crédito>
> > > e
> > > > > > somente
> > > > > > > de débito.
> > > > > > >
> > > > > > > Um registro de débito não está mais em aberto quando eu tenho
u>
> m
> > > outro
> > > > > > > registro de crédito fechando a fatura do cliente.
> > > > > > >
> > > > > > > Vejam um exemplo:
> > > > > > > DtEmissao     Cliente    VrDebito   VrCredito   Vencimento
> Numero
> > > > > > > Parcela
> > > > > > > 16/12/2004    1640         490,80
> 14/01/2005
> > > > > > 49201
> > > > > > > 1
> > > > > > > 16/12/2004    1640                           490,80
> 20/01/2005
> > > > > > 49201
> > > > > > > 1
> > > > > > >
> > > > > > > O Select abaixo está me retornando o seguinte:
> > > > > > >
> > > > > > > DtEmissao     Cliente    VrDebito   VrCredito   Vencimento
> Numero
> > > > > > > Parcela
> > > > > > > 16/12/2004    1640         490,80
> 14/01/2005
> > > > > > 49201
> > > > > > > 1
> > > > > > >
> > > > > > > E na verdade não deveria retornar nada, pois eu tenho um
> registro
> > > > > matando
> > > > > > o
> > > > > > > outro.
> > > > > > >
> > > > > > > O que está errado?
> > > > > > >
> > > > > > > Select MF.Numero, MF.NumDoc, MF.NumParcela, MF.VrDeb,
> MF.DtEmissao,
> > > > > > > MF.DtVenc, MF.CodCli, C.Nome, C.Cidade, C.ContaCtb from
> MovFinanc MF
> > > > > > > Left Outer Join Cliente C on C.Codigo = MF.CodCli
> > > > > > >
> > > > > > > Left Outer Join MovFinanc MF2 on MF2.Numero = MF.Numero
> > > > > > > and MF2.NumDoc = MF.NumDoc and MF2.NumParcela = MF.NumParcela
> > > > > > > and MF2.CodCli = MF.CodCli and MF2.VrCred is not null
> > > > > > >
> > > > > > > where MF.DtEmissao <= '01/31/2005' and MF.VrDeb is not Null
> > > > > > > and MF.CodCli = 1640 and MF2.VrCred is null
> > > > > > >
> > > > > > > group by MF.Numero, MF.NumDoc, MF.NumParcela, MF.VrDeb,
> > > MF.DtEmissao,
> > > > > > > MF.DtVenc, MF.CodCli, C.Nome, C.Cidade, C.ContaCtb
> > > > > > >
> > > > > > > Order by C.Nome
> > > > > > >
> > > > > > > Grato pela colaboração.
> > > > > > >
> > > > > > >
> > > > > >
> > > > >
> > >
>
> -----------------------------------------------------------------------> -
> > > --
> > > > > > --
> > > > > > > ----
> > > > > > >
> > > > > > >
> > > > > > > ______________________________________________
> > > > > > > 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
> > > > > > >
> > > > > > >
> > > > > > >
> > > > > > >
> > > > > > >
> > > > > > >
> > > > > > > ______________________________________________
> > > > > > > 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
> > > > > > >
> > > > > > >
> > > > > > >
> > > > > > >
> > > > > > >
> > > > > >
> > > > > >
> > > > >
> > >
>
> -----------------------------------------------------------------------> -
> > > --
> > > > > --
> > > > > > ----
> > > > > >
> > > > > >
> > > > > > ______________________________________________
> > > > > > 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
> > > > > >
> > > > > >
> > > > > >
> > > > > >
> > > > > >
> > > > >
> > >
>
> -----------------------------------------------------------------------> -
> > > --
> > > > > --
> > > > > > ----
> > > > > >
> > > > > >
> > > > > > ______________________________________________
> > > > > > 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
> > > > > >
> > > > > >
> > > > > >
> > > > > >
> > > > > >
> > > > >
> > > > >
> > > >
> > >
>
> ------------------------------------------------------------------------->
> > >  ---
> > > > > ----
> > > > >
> > > > >
> > > > > ______________________________________________
> > > > > 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
> > > > >
> > > > >
> > > > >
> > > >
> > > >
> > > >
> > >
> > >
> >
>
> --------------------------------------------------------------------------
> --
> > > ----
> > >
> > >
> > > ______________________________________________
> > > 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
> > >
> > >
> > >
> > >
> > > ______________________________________________
> > > 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
> >
> >
> >
>
>
> --------------------------------------------------------------------------
--
> ----
>
>
> ______________________________________________
> 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
>
>
>
>
> ______________________________________________
> 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
>





Mais detalhes sobre a lista de discussão lista