Select em 3 Tabelas
Amigos,
Nunca aprendi direito estas questões de inner join, left join, right join, subselect (sempre tive dificuldade em que casos usar qual).
Mas vamos ao exemplo prático.
Tenho 3 tabelas
vendas (id, id_vendedor, id_produtoanterior, id_produto, ...)
vendedores (id, nome, ....)
produtos (id, titulo, ...)
Atualmente usava esta query:
SELECT T1.*, T2.nome as vendedor, T2.id as id_vendedor, T3.titulo as produto
FROM vendas T1
INNER JOIN vendedores T2 ON T1.id_vendedor = T2.id
INNER JOIN produtos T3 ON T1.id_produto = T3.id
WHERE T1.id='$id'
Tudo funcionava beleza, a questão é que eu não tinha necessidade (que agora tenho) de exibir o nome do produto anterior (no caso ele tem o id na tabela de vendas, mas o titulo dele esta na tabela produtos), tentei fazer algo assim, mas não deu certo.
SELECT T1.*, T2.nome as vendedor, T2.id as id_vendedor, T3.titulo as produto, T4.titulo as produto
FROM vendas T1
INNER JOIN vendedores T2 ON T1.id_vendedor = T2.id
INNER JOIN produtos T3 ON T1.id_produto = T3.id
INNER JOIN produtos T4 ON T1.id_produto = T4.id
WHERE T1.id='$id'
Obviamente não deu certo. Acredito que o inner join neste caso não seja o adequado e sim um subselect (afinal, só quero puxar as informações como "titulo do produto" e "nome do vendedor" de outras tabelas, oq poderia ser resolvido com algo tipo:
SELECT * from vendas T1, produtos T2, vendedores T3 WHERE (select nome as vendedor from T3 where T3.id = T1.id_vendedor), (select titulo as produto from T2 where T2.id = T1.id_produto), (select titulo as produtoanterior from T2 where T2.id_produtoanterior = T1)
Ou algo assim (ideia principal, algusn nomes das tabelas estão trocado, mas esta seria a tabela real, porque "vendedores" na verdade é funcionário:
SELECT * FROM vendas WHERE id='1667'
SELECT funcionarios.nome as vendedor FROM funcionarios WHERE funcionarios.id = vendas.id_vendedor
SELECT produtos.titulo as plano FROM produtos WHERE produtos.id = vendas.id_produto
SELECT produtos.titulo as planoantigo FROM produtos WHERE produtos.id = vendas.id_produtoantigoDiscussão (4)
Carregando comentários...