Usamos cookies para medir audiência e melhorar sua experiência. Você pode aceitar ou recusar a qualquer momento. Veja sobre o iMasters.
Preciso de um SELECT para a seguinte função:
Supondo que eu tenha uma tabela pessoa com:
pessoa.id | pessoa.nome
Tabela vendas que tem:
vendas.id | pessoa.pessoacliente_id | pessoa.pessoavendedor_id | ...(+ informações irrelevantes no momento)
O que eu quero:
Um SELECT que me traga o nome do cliente, o nome do vendedor e as demais informações, enfim
SELECT vendas.blabla, pessoa.nome as vendedor, pessoa.nome as cliente FROM vendas, pessoa WHERE pessoa.id = vendas.pessoacliente_id AND pessoa.id = pessoavendedor_id
Tecnicamente, é isso aí que eu quero, mas lógico que a Sintaxe não é essa.
Enfim, como trazer o campo nome de uma tabela 2 vezes especificando qual nome eu quero em cada um? (entenderam isso?)
Existe algum SELECT pra fazer o que eu quero?
Olá,deixa eu ver se entendi direito.
Você tem uma tabela vendas com dois relacionamentos com a Tabela pessoa,certo?Uma FK é o cliente,a outra é o Vendedor...
Se entendi direito você pode fazer um inner join da seguinte forma:
select cliente.NomePessoa, vendedor.NomePessoa, v.CodigoVenda....
from pessoa cliente,
pessoa vendedor,
venda v
where v.CodigoCliente = cliente.CodigoPessoa
and v.CodigoVendedor = vendedor.CodigoVendedor
Eu já precisei fazer isso uma vez e deu certo...
Espero que você também consiga fazer...
Abraços....
Preciso muito arrumar mais tempo para meus tópicos aqui >.<
Eu solucionei o caso usando POG pura em PHP, mas a questão é a seguinte:
select pessoas.NomePessoa, pessoa.NomePessoa, v.CodigoVenda....
from pessoas,
venda as v
where pessoas.id = v.CodigoCliente
and pessoas.id = v.CodigoVendedor
Se fossem 2 tabelas diferentes, Deise Vicky, ficaria como você postou, realmente simples. Mas o problema é que o Nome da Pessoa está em uma única tabela (pessoas). Na tabela de vendas tem o id da pessoa compradora e o id da pessoa vendedora.
É como se no WHERE eu pedisse para pegar o nome onde o ID é 5 e pegasse o nome onde o ID é 7, por exemplo.
O problema é que nessa forma de SELECT, o banco de dados vai procurar um registro onde o ID é 5 e 7 ao mesmo tempo, e nunca vai achar (óbvio).
sry o flood, só quero testar a assinatura do tópico ^^
>
Preciso muito arrumar mais tempo para meus tópicos aqui >.<
Eu solucionei o caso usando POG pura em PHP, mas a questão é a seguinte:
select pessoas.NomePessoa, pessoa.NomePessoa, v.CodigoVenda....
from pessoas,
venda as v
where pessoas.id = v.CodigoCliente
and pessoas.id = v.CodigoVendedor
Se fossem 2 tabelas diferentes, Deise Vicky, ficaria como você postou, realmente simples. Mas o problema é que o Nome da Pessoa está em uma única tabela (pessoas). Na tabela de vendas tem o id da pessoa compradora e o id da pessoa vendedora.
É como se no WHERE eu pedisse para pegar o nome onde o ID é 5 e pegasse o nome onde o ID é 7, por exemplo.
O problema é que nessa forma de SELECT, o banco de dados vai procurar um registro onde o ID é 5 e 7 ao mesmo tempo, e nunca vai achar (óbvio).
sry o flood, só quero testar a assinatura do tópico ^^
OLÁ TENTE FAZER ASSIM
select
(select nome from pessoa where pessoa.id = vendas.id_compradora) as pessoa_compradora,
(select nome from pessoa where pessoa.id = vendas.id_vendedora) as pessoa_vendedora
from
vendas
Abraços
KUROLE
100%! Finalmente! Só pra concluir o caso, isso é vantajoso, certo?
As vezes certas coisas parecem bem óbvias para mim e depois vejo que não estava 100% certo...
Ao invés de executar 1 Query, alocar espaço na memória para o resultado, depois fazer um segundo Query e concatenar os Arrays, esse múltiplo Select no banco eu alocaria espaço na memória apenas uma vez, porém com um trabalho extra ao banco. Ainda assim no banco é melhor, certo ?
>
Preciso muito arrumar mais tempo para meus tópicos aqui >.<
Eu solucionei o caso usando POG pura em PHP, mas a questão é a seguinte:
select pessoas.NomePessoa, pessoa.NomePessoa, v.CodigoVenda....
from pessoas,
venda as v
where pessoas.id = v.CodigoCliente
and pessoas.id = v.CodigoVendedor
Se fossem 2 tabelas diferentes, Deise Vicky, ficaria como você postou, realmente simples. Mas o problema é que o Nome da Pessoa está em uma única tabela (pessoas). Na tabela de vendas tem o id da pessoa compradora e o id da pessoa vendedora.
É como se no WHERE eu pedisse para pegar o nome onde o ID é 5 e pegasse o nome onde o ID é 7, por exemplo.
O problema é que nessa forma de SELECT, o banco de dados vai procurar um registro onde o ID é 5 e 7 ao mesmo tempo, e nunca vai achar (óbvio).
sry o flood, só quero testar a assinatura do tópico ^^
Apesar de você já ter resolvido a sua dúvida, só queria explicar o que eu fiz na query de exemplo
select cliente.NomePessoa, vendedor.NomePessoa, v.CodigoVenda....
from pessoa cliente, //alias
pessoa vendedor, //alias
venda v
where v.CodigoCliente = cliente.CodigoPessoa
and v.CodigoVendedor = vendedor.CodigoVendedor
Eu estou fazendo select na tabela pessoa duas vezes, uma vez coloco o alias 'cliente' e outra 'vendedor'.
Isso dá certo porque eu utilizo assim!
Existe a tabela clientes e a de vendedores?
Se sim bastará usar 2 INNER JOIN que resolve o caso