none
Subselect em Pedidos RRS feed

  • 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_Pedido

    e 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_Produto

    Na 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 p

    Mas 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.

    quinta-feira, 18 de junho de 2020 04:58

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
    quinta-feira, 18 de junho de 2020 11:50