Consulta Query - buscando dados da mesma tabela
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?
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
Curtidas 0
Respostas
Emerson Nascimento
22/11/2005
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)
GOSTEI 0
Janete
22/11/2005
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.
GOSTEI 0
Edilcimar
22/11/2005
tente select distinct
GOSTEI 0
Janete
22/11/2005
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.
GOSTEI 0
Edilcimar
22/11/2005
Por que tem clientes.nome as rem e clientes.nome as dest?
GOSTEI 0
Janete
22/11/2005
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.
GOSTEI 0
Emerson Nascimento
22/11/2005
Janete, creio que você tenha feito errado.
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.
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.
GOSTEI 0
Edilcimar
22/11/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
GOSTEI 0
Siam
22/11/2005
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
GOSTEI 0
Janete
22/11/2005
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.
GOSTEI 0
Emerson Nascimento
22/11/2005
Janete, creio que você tenha feito errado.
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.
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)
isso não funcionou???
GOSTEI 0
Siam
22/11/2005
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.GOSTEI 0
Siam
22/11/2005
isso não funcionou???
Remetente e destinatário ficam iguais; pelo menos no Interbase.GOSTEI 0
Janete
22/11/2005
[quote:5a134989d9=´emerson.en´]Janete, creio que você tenha feito errado.
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.
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)
isso não funcionou???[/quote:5a134989d9]
Acrescentei a tabela de clientes no From e ficou a mesma coisa. Estou usando paradox.
GOSTEI 0
Emerson Nascimento
22/11/2005
acrescentou no from? mas NÃO é pra acrescentar...
GOSTEI 0
Janete
22/11/2005
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
GOSTEI 0
Janete
22/11/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.
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.
GOSTEI 0
Janete
22/11/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?
GOSTEI 0
Emerson Nascimento
22/11/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?
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:
quais são os dados exibidos em todas as colunas depois que você abre essa consulta?
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:
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)´);
GOSTEI 0
Siam
22/11/2005
Fazendo dois Left Join na tabela de Clientes, o Interbase também repete o mesmo nome p/ rem e dest
GOSTEI 0
Emerson Nascimento
22/11/2005
claro!!!! acabei de ver aonde está o erro!!!! ô pessoal que não copia do jeito que a gente escreve....
notem que a tabela clientes recebe dois apelidos. é pra usar os apelidos!!!
meu primeiro post:
como a Janete colocou:
[size=18:760ee602bd]O CORRETO:[/size:760ee602bd]
se tem duas vezes a tabela clientes, mas com apelidos diferentes, é pra ser usado o APELIDO e não o nome da tabela!!!
notem que a tabela clientes recebe dois apelidos. é pra usar os apelidos!!!
meu primeiro post:
Select Ped.Numero, Ped.DataEmissao, Ped.CodRem, Rem.Nome Remetente, <--- REM.Nome Ped.CodDest, Dest.Nome Destinatario <--- DEST.Nome From Pedido Ped left join Clientes Rem on (Rem.Codigo = Ped.CodRem) left join Clientes Dest on (Dest.Codigo = Ped.CodDest)
como a Janete colocou:
SQL.Add(´Select Pedido.Numero, Pedido.DataEmissao,Pedido.CodRem,Pedido.CodDest,Clientes.Nome as Rem,Clientes.Nome as Dest´); <-- CLIENTES.Nome ESTÁ ERRADO!!! 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)´);
[size=18:760ee602bd]O CORRETO:[/size:760ee602bd]
SQL.Clear; SQL.Add(´Select Pedido.Numero, Pedido.DataEmissao,Pedido.CodRem,Pedido.CodDest,Rem.Nome as Remetente,Dest.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)´);
se tem duas vezes a tabela clientes, mas com apelidos diferentes, é pra ser usado o APELIDO e não o nome da tabela!!!
GOSTEI 0