Array
(
)

Consulta Query - buscando dados da mesma tabela

Janete
   - 22 nov 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?


Emerson
   - 22 nov 2005

#Código

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)



Janete
   - 22 nov 2005


Citação:
#Código

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.


Edilcimar
   - 22 nov 2005

tente select distinct


Janete
   - 22 nov 2005


Citação:
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.


Edilcimar
   - 22 nov 2005

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


Janete
   - 22 nov 2005


Citação:
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.


Emerson
   - 22 nov 2005

Janete, creio que você tenha feito errado.

#Código

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 from. Nenhuma outra.

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


Edilcimar
   - 22 nov 2005

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


Siam
   - 22 nov 2005

Se seu banco aceitar essa sintaxe, acho que deve funcionar:#Código

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



Janete
   - 23 nov 2005


Citação:
Se seu banco aceitar essa sintaxe, acho que deve funcionar:#Código

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.


Emerson
   - 23 nov 2005


Citação:
Janete, creio que você tenha feito errado.

#Código

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 from. 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???


Siam
   - 23 nov 2005


Citação:
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.


Siam
   - 23 nov 2005


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


Janete
   - 23 nov 2005


Citação:

Citação:
Janete, creio que você tenha feito errado.

#Código

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 from. 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???

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


Emerson
   - 23 nov 2005

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


Janete
   - 23 nov 2005


Citação:
acrescentou no from? mas NÃO é pra acrescentar...


Então não entendi o q vc falou...
´preste atenção na instrução acima: somente a tabela Pedido está na cláusula from. Nenhuma outra.

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

Mas testei com From Pedido e com Frm Pedidos,Clientes tb não adiantou


Janete
   - 23 nov 2005

Agora está dessa forma:

SQL.Add(´Select Pedido.Numero, Pedido.DataEmissao,Pedido.CodRem,Pedido.CodDest,Clientes.Nome as Rem,Clientes.Nome as Dest´);
SQL.Add(´From Pedido);

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)´);

e está trazendo a quantidade de registro de pedidos certos mas repete cada remetente no destinatário exemplo:

Numero Data Remetente Destinatário
1 23/11/05 Cliente1 Cliente1
2 23/11/05 Cliente2 Cliente2

e o destinatário á outro cliente não é nem o CLiente1 nem o Clinete2, ele simplesmente repete o remetente para o destinatário.


Janete
   - 23 nov 2005

Será que daria algum problema se eu buscar os nomes que quero atraves de um New Field na query buscando em uma table mesmo a tabela de clientes?


Emerson
   - 23 nov 2005

olha, ao que parece o problema está na sua tabela de pedidos. certifique-se que os dados estão gravados corretamente nela.

quais são os dados exibidos em todas as colunas depois que você abre essa consulta?

#Código

Numero | DataEmissao | CodRem | CodDest | Rem                  | Dest


outra coisa: deixe as últimas colunas com os nomes inteiros (Remetente e Destinatario). talvez o paradox esteja ´se perdendo´ pois você deixou essas colunas com o mesmo apelido dado à tabela clientes.

deixe o nome completo:
#Código
SQL.Clear;
SQL.Add(´Select Pedido.Numero, Pedido.DataEmissao,Pedido.CodRem,Pedido.CodDest,Clientes.Nome as Remetente,Clientes.Nome as Destinatario´);
SQL.Add(´From Pedido);
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)´);



Siam
   - 23 nov 2005

Fazendo dois Left Join na tabela de Clientes, o Interbase também repete o mesmo nome p/ rem e dest