Select Remetente e Destinatario mesma tabela
Tenho uma tabela de clientes aonde a mesma é cadastrado emitente e destinatário. Estou tendo dificuldades em trazer os dados em um select. Segue minha instrucao:
Tabela clientes
CLI_ID
CLI_NOME
Tabela movimento
MOV_NROLAN
MOV_DATLAN
MOV_IDREM
MOV_IDDES
select lct.MOV_NROLAN, lct.MOV_DATLAN, rem.CLI_NOME, des.CLI_NOME from MOVIMENTO lct
inner join CLIENTES rem on rem.CLI_ID = lct.MOV_IDREM
inner join CLIENTES des on des.CLI_ID = lct.MOV_IDDES
where (lct.MOV_DATLAN between :p1 and :p2) O retorno da instrucao acima traz nome iguais para remetente e destinatario. Desde já agradeço,
where (lct.MOV_DATLAN between :p1 and :p2) O retorno da instrucao acima traz nome iguais para remetente e destinatario. Desde já agradeço,
Eremita
Curtidas 0
Respostas
Eduardo Marcolongo
04/10/2010
Tente assim:
select lct.MOV_NROLAN, lct.MOV_DATLAN, rem.CLI_NOME, des.CLI_NOME from MOVIMENTO lctinner join CLIENTES rem on rem.CLI_ID = lct.MOV_IDREMinner join CLIENTES des on des.CLI_ID = lct.MOV_IDDES where (lct.MOV_DATLAN between :p1 and :p2) select lct.MOV_NROLAN, lct.MOV_DATLAN, (select clientes.cli_nome from cliente where clientes.cli_ID = lct.mov_idrem) as remetente, (select clientes.cli_nome from cliente where clientes.cli_ID = lct.mov_iddes) as destinatario from MOVIMENTO lctwhere (lct.MOV_DATLAN between :p1 and :p2)
GOSTEI 0
Wilson Junior
04/10/2010
Verifique se os seus campos lct.MOV_IDREM e lct.MOV_IDDES estão com o mesmo valor para o registro.
Espero ter colaborado.
Espero ter colaborado.
GOSTEI 0
Eremita
04/10/2010
O código abaixo não funcionou
select lct.MOV_NROLAN, lct.MOV_DATLAN, (select clientes.cli_nome from cliente where clientes.cli_ID = lct.mov_idrem) as remetente, (select clientes.cli_nome from cliente where clientes.cli_ID = lct.mov_iddes) as destinatario from
MOVIMENTO lct
where (lct.MOV_DATLAN between :p1 and :p2) Quanto aos dados estarem diferentes dentro da tabela, estão sim
MOVIMENTO lct
where (lct.MOV_DATLAN between :p1 and :p2) Quanto aos dados estarem diferentes dentro da tabela, estão sim
GOSTEI 0
Aroldo Zanela
04/10/2010
Verifique se os seus campos lct.MOV_IDREM e lct.MOV_IDDES estão com o mesmo valor para o registro.
Espero ter colaborado.
Colega,
O Paulista tem razão, não há nada errado com seu script. Além de estar de acordo com as boas práticas de não utilizar subquerie como foi sugerido.
Espero ter colaborado.
select lct.MOV_NROLAN, lct.MOV_DATLAN, rem.CLI_NOME, des.CLI_NOME from MOVIMENTO lct inner join CLIENTES rem on rem.CLI_ID = lct.MOV_IDREM inner join CLIENTES des on des.CLI_ID = lct.MOV_IDDES where (lct.MOV_DATLAN between :p1 and :p2)
GOSTEI 0
Eremita
04/10/2010
Realmente não entendi o que estava acontece, como foi dito o script estava correto e as informações na tabela também. Funcionou...
Acho que agora para finalizar a coisa complica um pouco mais ...
Tenho na tabela movimento o campo MOV_IDPAG que se refere a quem será o pagador (remetente ou destinatário) e na tabela CLIENTES COB_ID que se refere ao tipo de cobrança deste pagador.
Complemementando o código abaixo preciso trazer a cidade do pagador e a descrição do tipo de cobrança.
Minha principal dificuldade é em trazer a descrição da cobrança.
Tabela cobranca
COB_ID
COB_DESCRICAO
Tabela clientes
CLI_ID
CLI_NOME CLI_CIDADE
COB_ID
Tabela movimento
MOV_NROLAN
MOV_DATLAN
MOV_IDREM
MOV_IDDES MOV_IDPAG #Código select
lct.MOV_NROLAN,
lct.MOV_DATLAN,
rem.CLI_NOME,
des.CLI_NOME , pag.CLI_CIDADE, cob.COB_DESCRICAO
from
MOVIMENTO lct
inner join
CLIENTES rem
on
rem.CLI_ID = lct.MOV_IDREM
inner join
CLIENTES des
on
des.CLI_ID = lct.MOV_IDDES
inner join
CLIENTES pag
on
pag.CLI_IDPAG = lct.MOV_IDPAG where
(lct.MOV_DATLAN between :p1 and :p2) Desde já agradeço,
CLI_ID
CLI_NOME CLI_CIDADE
COB_ID
Tabela movimento
MOV_NROLAN
MOV_DATLAN
MOV_IDREM
MOV_IDDES MOV_IDPAG #Código select
lct.MOV_NROLAN,
lct.MOV_DATLAN,
rem.CLI_NOME,
des.CLI_NOME , pag.CLI_CIDADE, cob.COB_DESCRICAO
from
MOVIMENTO lct
inner join
CLIENTES rem
on
rem.CLI_ID = lct.MOV_IDREM
inner join
CLIENTES des
on
des.CLI_ID = lct.MOV_IDDES
inner join
CLIENTES pag
on
pag.CLI_IDPAG = lct.MOV_IDPAG where
(lct.MOV_DATLAN between :p1 and :p2) Desde já agradeço,
GOSTEI 0
Eriley Barbosa
04/10/2010
Se não vai utilizar left ou rigth join, utilize where e and:
select
lct.MOV_NROLAN,
lct.MOV_DATLAN,
rem.CLI_NOME,
des.CLI_NOME , pag.CLI_CIDADE, cob.COB_DESCRICAO
from
MOVIMENTO lct,
CLIENTES rem , CLIENTES des ,
CLIENTES pag
where rem.CLI_ID = lct.MOV_IDREM
and des.CLI_ID = lct.MOV_IDDES
and pag.CLI_IDPAG = lct.MOV_IDPAG and pag.COB_ID = cob.COB_ID and lct.MOV_DATLAN between :p1 and :p2 Mas se quiser continuar com inner join, tente assim: select
lct.MOV_NROLAN,
lct.MOV_DATLAN,
rem.CLI_NOME,
des.CLI_NOME , pag.CLI_CIDADE, cob.COB_DESCRICAO
from
MOVIMENTO lct
inner join
CLIENTES rem
on
rem.CLI_ID = lct.MOV_IDREM
inner join
CLIENTES des
on
des.CLI_ID = lct.MOV_IDDES
inner join
CLIENTES pag
on
pag.CLI_IDPAG = lct.MOV_IDPAG inner join COBRANCA cob on pag.COB_ID = cob.COB_ID where
lct.MOV_DATLAN between :p1 and :p2
lct.MOV_NROLAN,
lct.MOV_DATLAN,
rem.CLI_NOME,
des.CLI_NOME , pag.CLI_CIDADE, cob.COB_DESCRICAO
from
MOVIMENTO lct,
CLIENTES rem , CLIENTES des ,
CLIENTES pag
where rem.CLI_ID = lct.MOV_IDREM
and des.CLI_ID = lct.MOV_IDDES
and pag.CLI_IDPAG = lct.MOV_IDPAG and pag.COB_ID = cob.COB_ID and lct.MOV_DATLAN between :p1 and :p2 Mas se quiser continuar com inner join, tente assim: select
lct.MOV_NROLAN,
lct.MOV_DATLAN,
rem.CLI_NOME,
des.CLI_NOME , pag.CLI_CIDADE, cob.COB_DESCRICAO
from
MOVIMENTO lct
inner join
CLIENTES rem
on
rem.CLI_ID = lct.MOV_IDREM
inner join
CLIENTES des
on
des.CLI_ID = lct.MOV_IDDES
inner join
CLIENTES pag
on
pag.CLI_IDPAG = lct.MOV_IDPAG inner join COBRANCA cob on pag.COB_ID = cob.COB_ID where
lct.MOV_DATLAN between :p1 and :p2
GOSTEI 0
Aroldo Zanela
04/10/2010
Colega,
Você criou o alias "pag", mas o mesmo aponta para clientes e deveria apontar para a tabela cobrança.
GOSTEI 0
Eriley Barbosa
04/10/2010
Desculpe faltou a tabela de cobrança no From.
Se não vai utilizar left ou rigth join, utilize where e and:
select
lct.MOV_NROLAN,
lct.MOV_DATLAN,
rem.CLI_NOME,
des.CLI_NOME , pag.CLI_CIDADE, cob.COB_DESCRICAO
from
MOVIMENTO lct,
CLIENTES rem , CLIENTES des ,
CLIENTES pag, COBRANCA cob
where rem.CLI_ID = lct.MOV_IDREM
and des.CLI_ID = lct.MOV_IDDES
and pag.CLI_IDPAG = lct.MOV_IDPAG and pag.COB_ID = cob.COB_ID and lct.MOV_DATLAN between :p1 and :p2 Mas se quiser continuar com inner join, tente assim: select
lct.MOV_NROLAN,
lct.MOV_DATLAN,
rem.CLI_NOME,
des.CLI_NOME , pag.CLI_CIDADE, cob.COB_DESCRICAO
from
MOVIMENTO lct
inner join
CLIENTES rem
on
rem.CLI_ID = lct.MOV_IDREM
inner join
CLIENTES des
on
des.CLI_ID = lct.MOV_IDDES
inner join
CLIENTES pag
on
pag.CLI_IDPAG = lct.MOV_IDPAG inner join COBRANCA cob on pag.COB_ID = cob.COB_ID where
lct.MOV_DATLAN between :p1 and :p2
lct.MOV_NROLAN,
lct.MOV_DATLAN,
rem.CLI_NOME,
des.CLI_NOME , pag.CLI_CIDADE, cob.COB_DESCRICAO
from
MOVIMENTO lct,
CLIENTES rem , CLIENTES des ,
CLIENTES pag, COBRANCA cob
where rem.CLI_ID = lct.MOV_IDREM
and des.CLI_ID = lct.MOV_IDDES
and pag.CLI_IDPAG = lct.MOV_IDPAG and pag.COB_ID = cob.COB_ID and lct.MOV_DATLAN between :p1 and :p2 Mas se quiser continuar com inner join, tente assim: select
lct.MOV_NROLAN,
lct.MOV_DATLAN,
rem.CLI_NOME,
des.CLI_NOME , pag.CLI_CIDADE, cob.COB_DESCRICAO
from
MOVIMENTO lct
inner join
CLIENTES rem
on
rem.CLI_ID = lct.MOV_IDREM
inner join
CLIENTES des
on
des.CLI_ID = lct.MOV_IDDES
inner join
CLIENTES pag
on
pag.CLI_IDPAG = lct.MOV_IDPAG inner join COBRANCA cob on pag.COB_ID = cob.COB_ID where
lct.MOV_DATLAN between :p1 and :p2
GOSTEI 0
Eremita
04/10/2010
Então ... na tabela MOVIMENTO tenho o MOV_IDPAG que determina quem é o pagador, na tabela CLIENTE tenho o CLI_IDCOB que determina o codigo do tipo de pagamento e na tabela COBRANCA aonde terei a descricao. Não sei como traduzir isto no script.
GOSTEI 0
Eriley Barbosa
04/10/2010
Testou os scripts que te passei?
GOSTEI 0
Eremita
04/10/2010
Beleza, agradeço a todos pela força.
GOSTEI 0