Select Remetente e Destinatario mesma tabela

Delphi

04/10/2010

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,
Eremita

Eremita

Curtidas 0

Respostas

Eduardo Marcolongo

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

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.
GOSTEI 0
Eremita

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
 
GOSTEI 0
Aroldo Zanela

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.  
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)
  Testei aqui e funcionou. Se houver problemas, são com os dados.
GOSTEI 0
Eremita

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,
GOSTEI 0
Eriley Barbosa

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
GOSTEI 0
Aroldo Zanela

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

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
 
GOSTEI 0
Eremita

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

Eriley Barbosa

04/10/2010

Testou os scripts que te passei?
GOSTEI 0
Eremita

Eremita

04/10/2010

Beleza, agradeço a todos pela força.
GOSTEI 0
POSTAR