Usuário com melhor resposta
Subselect em Pedidos

Pergunta
-
Olá pessoal, vou tentar passar o cenário onde necessito ajuda.
Tenho algumas tabelas e principais campos: Pedido(id_pedido, id_Cliente, id_Rota, id_StatusPedido)
Rota(id_Rota, NomeRota)
Cliente(id_Cliente, id_Endereco), NomeCli)
Endereco(id_Endereco, Logradouro)
StatusPedido(id_Status, StaDescr)
Não estou conseguindo trazer na query o campo logradouro da tabela Cliente. Já fiz várias Queries. vou postar apenas 2.
select p.DataPedido, p.Id_Empresa, p.Id_Rota, p.Id_Cliente, p.Id_Pedido, p.Id_StatusPedido, p.ValorTotal,
r.NomeRota, r.frete,
c.Nome,c.Telefone1,c.Telefone2,c.Referencia,c.id_Endereco,
e.Logradouro, e.Complemento, e.Cidade, e.Bairro, e.Uf,
x.NomeProduto, x.IsRefrigerado,
i.Quantidade, i.ValorUnitario, i.isSeparado,
f.FormaPagamento,
s.StatusPedido,
u.ProdutoMedida
from pedido as p, produto as x, pedido_produtos as i, rota as r, cliente as c, endereco as e
where p.Id_Empresa=1 and p.Id_Rota=r.Id_Rota and c.Id_Cliente=p.Id_Cliente and p.Id_StatusPedido=s.id_StatusPedido and
x.Id_ProdutoMedida=u.Id_ProdutoMedida and p.Id_FormaPagamento=f.Id_FormaPagamento and
c.Id_Endereco=e.Id_Endereco and x.id_Produto=i.id_produto and i.Id_Pedido=p.id_pedido
order by p.id_Pedidoe outra,
select p.DataPedido, p.Id_Empresa, p.Id_Rota, p.Id_Cliente, p.Id_Pedido, p.Id_StatusPedido, p.ValorTotal,
r.NomeRota, r.frete,
c.Nome,c.Telefone1,c.Telefone2,c.Referencia,c.id_Endereco,
e.Logradouro, e.Complemento, e.Cidade, e.Bairro, e.Uf,
x.NomeProduto, x.IsRefrigerado,
i.Quantidade, i.ValorUnitario, i.isSeparado,
f.FormaPagamento,
s.StatusPedido,
u.ProdutoMedida
from pedido as p
inner join Rota as r on p.Id_Rota=r.Id_Rota
inner join Cliente as c on c.Id_Cliente=p.Id_Cliente
inner join Endereco as e on c.Id_Cliente=p.Id_Cliente and c.Id_Endereco=e.Id_Endereco
inner join pedido_produtos as i on i.Id_Pedido=p.id_pedido
inner join produto as x on x.id_Produto=i.id_produto and i.Id_Pedido=p.id_pedido
inner join FormaPagto as f on p.Id_FormaPagamento=f.Id_FormaPagamento
inner join StatusPedido as s on p.Id_StatusPedido=s.id_StatusPedido
inner Join UnidadeMedida as u on x.Id_ProdutoMedida=u.Id_ProdutoMedida
where p.Id_Empresa=1 order by p.id_Pedido, x.id_ProdutoNa verdade não sei se o Inner Join está sendo usado corretamente.
Estava fazendo esta abaixo:
select p.DataPedido, p.Id_Empresa, p.Id_Rota, p.Id_Cliente, p.Id_Pedido, p.Id_StatusPedido, p.ValorTotal,
(select r.NomeRota from rota as r where p.id_rota=r.Id_Rota and p.id_rota=1) as Nome_Rota,
(Select c.Nome from Cliente as c where p.id_Cliente=c.Id_Cliente) As Nome_Cliente,
(Select c.Telefone1 from Cliente as c where p.id_Cliente=c.Id_Cliente) As Telefone1,
(Select c.Telefone2 from Cliente as c where p.id_Cliente=c.Id_Cliente) As Telefone2,
(Select c.Referencia from Cliente as c where p.id_Cliente=c.Id_Cliente) As Referencia,
(Select c.id_Endereco from Cliente as c where p.id_Cliente=c.Id_Cliente) As id_Endereco,
(select e.Logradouro from Endereco as e where e.id_endereco=id_Endereco)
from pedido as pMas dá erro se na condição onde busco o logradouro eu puser c.id_endereco, por não existir e se eu tirar o (c.) deixando apenas id_endereco também dá erro.
Será que alguém poderia ajudar?
Grato.
Respostas
-
Renato
fiz bem simples baseado nos detalhes que você nos deu:
select po.id_pedido , po.id_statuspedido , st.StaDescr , po.id_cliente , c.NomeCli , c.id_endereco , log.logradouro , po.id_Rota , rt.nomerota from pedido po left join StatusPedido st on st.id_Status = po.id_statuspedido left join cliente c on c.id_cliente = po.id_cliente left join Endereco log on log.id_endereco = c.id_endereco left join rota rt on rt.id_rota = po.id_rota
você pode testar isso neste fiddle.
Abraço
Natan
- Marcado como Resposta Renato Reis1 quinta-feira, 18 de junho de 2020 14:21
- Não Marcado como Resposta Renato Reis1 quinta-feira, 18 de junho de 2020 14:22
- Marcado como Resposta Renato Reis1 quinta-feira, 18 de junho de 2020 14:22