Consulta Query - buscando dados da mesma tabela

22/11/2005

Tenho uma tabela onde busco qual o remetente e o destinatário no mesmo pedido e esse remente e destinatário é cadastrado na mesma tabela de clientes, só que na consulta com query, não estou conseguindo fazer, acontece assim, como eu estou pegando em dois códigos diferentes na mesma tabela, no caso a de clientes qdo coloco pra trazer os dois clientes (CodRem e CodDest) conforme abaixo não dá certo só qdo é um somente os dois não traz nada na consulta.

SQL.Add(´Select pedido .Numero, pedido .DataEmissao,
pedido.CodRem,pedido .CodDest,Clientes.Nome as Rem,Clientes.Nome as Dest´);
SQL.Add(´From pedido ,Clientes´);
SQL.Add(´Where pedido .CodRem=Clientes.Codigo´);
SQL.Add(´and pedido .CodDest=Clientes.Codigo´);

Como resolver essa situação?


Janete

Respostas

22/11/2005

Emerson

Select
  Ped.Numero, Ped.DataEmissao,
  Ped.CodRem, Rem.Nome Remetente,
  Ped.CodDest, Dest.Nome Destinatario
From
  Pedido Ped
left join
  Clientes Rem on (Rem.Codigo = Ped.CodRem)
left join
  Clientes Dest on (Dest.Codigo = Ped.CodDest)



Responder Citar

22/11/2005

Janete

Select
  Ped.Numero, Ped.DataEmissao,
  Ped.CodRem, Rem.Nome Remetente,
  Ped.CodDest, Dest.Nome Destinatario
From
  Pedido Ped
left join
  Clientes Rem on (Rem.Codigo = Ped.CodRem)
left join
  Clientes Dest on (Dest.Codigo = Ped.CodDest)


Fiz dessa formas, mas tb não deu certo, agora ele traz a qdo de pedido mesmo sendo um somente repedido para a quantidade de cliente.


Responder Citar

22/11/2005

Edilcimar

tente select distinct


Responder Citar

22/11/2005

Janete

tente select distinct


Acrescentei oq vc falou e agora ficou dessa forma:

SQL.clear;
SQL.Add(´Select distinct Pedido.Numero, CTRC.DataEmissao,Clientes.Nome as Rem,CTRC.CodRem,Pedido.CodDest,Clientes.Nome as Dest´);
SQL.Add(´From Pedido,Clientes´);
SQL.Add(´left join´);
SQL.Add(´Clientes Rem on (Rem.Codigo = Pedido.CodRem)´);
SQL.Add(´left join´);
SQL.Add(´Clientes Dest on (Dest.Codigo = Pedido.CodDest)´);

mas acontece a mesma coisa, só tem um pedido mas ele traz repetindo o mesmo pedido para cada cliente cadastrado.


Responder Citar

22/11/2005

Edilcimar

Por que tem clientes.nome as rem e clientes.nome as dest?


Responder Citar

22/11/2005

Janete

Por que tem clientes.nome as rem e clientes.nome as dest?


Dá uma olhadinha no primeiro tópico q escrevi, se não entender me fala.


Responder Citar

22/11/2005

Emerson

Janete, creio que você tenha feito errado.

Select 
  Ped.Numero, Ped.DataEmissao, 
  Ped.CodRem, Rem.Nome Remetente, 
  Ped.CodDest, Dest.Nome Destinatario 
From 
  Pedido Ped 
left join 
  Clientes Rem on (Rem.Codigo = Ped.CodRem) 
left join 
  Clientes Dest on (Dest.Codigo = Ped.CodDest)


preste atenção na instrução acima: somente a tabela Pedido está na cláusula [i:23b8eb5576]from[/i:23b8eb5576]. Nenhuma outra.

apesar de você não ter informado qual banco de dados está utilizando, essa sintaxe funciona para a maioria deles.


Responder Citar

22/11/2005

Edilcimar

Ok, eu não havia lido o início, mas ainda assim, você vai ter problema ao pegar o cliente(pelo nome) remetente e destinatário, imagine que tenha um remetente José da Silva e um destinatário José da Silva, sendo que o segundo é outra pessoa(coisa pouco provável uma vez que este nome é pouco comum) e aí como é que fica o teu select? Troque o select nome por select codigo da pessoa, depois compare de maneira direta, where remetente.codigo igual ou diferente destinatariio.codigo


Responder Citar

22/11/2005

Siam

Se seu banco aceitar essa sintaxe, acho que deve funcionar:
Select pedido.Numero, pedido.DataEmissao, pedido.CodRem, pedido.CodDest, 
(Select Nome From Clientes Where Codigo = Pedido.CodRem) as Rem,
(Select Nome From Clientes Where Codigo = Pedido.CodDest) as Dest
From pedido



Responder Citar

23/11/2005

Janete

Se seu banco aceitar essa sintaxe, acho que deve funcionar:
Select pedido.Numero, pedido.DataEmissao, pedido.CodRem, pedido.CodDest, 
(Select Nome From Clientes Where Codigo = Pedido.CodRem) as Rem,
(Select Nome From Clientes Where Codigo = Pedido.CodDest) as Dest
From pedido


Fiz dessa forma e ele traz os pedidos certos sem repetir, mas não traz nenhum dos nomes nem do remetente e nem do destinatário, eles ficam em brancos.


Responder Citar

23/11/2005

Emerson

Janete, creio que você tenha feito errado.
Select 
  Ped.Numero, Ped.DataEmissao, 
  Ped.CodRem, Rem.Nome Remetente, 
  Ped.CodDest, Dest.Nome Destinatario 
From 
  Pedido Ped 
left join 
  Clientes Rem on (Rem.Codigo = Ped.CodRem) 
left join 
  Clientes Dest on (Dest.Codigo = Ped.CodDest)
preste atenção na instrução acima: somente a tabela Pedido está na cláusula [i:30d0e72882]from[/i:30d0e72882]. Nenhuma outra. apesar de você não ter informado qual banco de dados está utilizando, essa sintaxe funciona para a maioria deles.


isso não funcionou???


Responder Citar

23/11/2005

Siam

Fiz dessa forma e ele traz os pedidos certos sem repetir, mas não traz nenhum dos nomes nem do remetente e nem do destinatário, eles ficam em brancos.
Se ficam em branco é pq nem o remetente e nem o destinatário estão cadastrados na tabela Clientes.


Responder Citar

23/11/2005

Siam

isso não funcionou???
Remetente e destinatário ficam iguais; pelo menos no Interbase.


Responder Citar

23/11/2005

Janete

[quote:5a134989d9=´emerson.en´]Janete, creio que você tenha feito errado.
Select 
  Ped.Numero, Ped.DataEmissao, 
  Ped.CodRem, Rem.Nome Remetente, 
  Ped.CodDest, Dest.Nome Destinatario 
From 
  Pedido Ped 
left join 
  Clientes Rem on (Rem.Codigo = Ped.CodRem) 
left join 
  Clientes Dest on (Dest.Codigo = Ped.CodDest)
preste atenção na instrução acima: somente a tabela Pedido está na cláusula [i:5a134989d9]from[/i:5a134989d9]. Nenhuma outra. apesar de você não ter informado qual banco de dados está utilizando, essa sintaxe funciona para a maioria deles.


isso não funcionou???[/quote:5a134989d9]

Acrescentei a tabela de clientes no From e ficou a mesma coisa. Estou usando paradox.


Responder Citar

23/11/2005

Emerson

acrescentou no from? mas NÃO é pra acrescentar...


Responder Citar