none
Ajuda com consulta RRS feed

  • Pergunta

  • Boa tarde à todos 

    Como não manjo muito de banco de dados, mas preciso me virar desenvolvendo em .NET, de vez em quando recorro à ajuda dos amigos. 

    Para entenderem, tenho o caso clássico de 2 tabelas e uma ligando as 2 (1x1): 

    Não são estas entidades, apenas exemplificando: 

    Clientes, Produtos, Produtos_Cliente 

    Preciso trazer numa consulta: 

    -Todos os produtos da tabela; 

    -Quando for um produto que já está relacionado com o Cliente: exibir um flag que consta nessa tabela de 1x1. (um dado qualquer). 

    E quando esse produto não tiver relação com o cliente, eu exibo esse dado como NULL. 

    O único parâmetro é o ID do cliente. Mas pode ser sem parâmetros. 

    Em todos os casos, quero que traga todos os produtos e quando houver relação, tem que trazer também. 

    Alguém tem idéia de como fazer. 

    Tentei alguns LEFT, RIGHT JOIN, UNION, mas devo ter feito algo errado. 

    Poderiam me ajudar. 

    Fico agradecido.
    quinta-feira, 18 de julho de 2013 19:48

Respostas

  • Boa tarde,

    Experimente mais ou menos dessa forma:

    select
        c.IdCliente,
        c.Nome,
        p.IdProduto,
        p.Descricao,
        case when pc.IdProduto is not null then 'S' end as Relacionado
    from Clientes as c
    cross join Produtos as p
    left join Produtos_Cliente as pc
        on 
            pc.IdCliente = c.IdCliente and
            pc.IdProduto - p.IdProduto
    where
        c.IdCliente = @IdCliente
        
    

    Espero que ajude.


    Assinatura: http://www.imoveisemexposicao.com.br

    • Marcado como Resposta Rafaselic quinta-feira, 18 de julho de 2013 21:04
    quinta-feira, 18 de julho de 2013 20:14

Todas as Respostas

  • Boa tarde,

    Experimente mais ou menos dessa forma:

    select
        c.IdCliente,
        c.Nome,
        p.IdProduto,
        p.Descricao,
        case when pc.IdProduto is not null then 'S' end as Relacionado
    from Clientes as c
    cross join Produtos as p
    left join Produtos_Cliente as pc
        on 
            pc.IdCliente = c.IdCliente and
            pc.IdProduto - p.IdProduto
    where
        c.IdCliente = @IdCliente
        
    

    Espero que ajude.


    Assinatura: http://www.imoveisemexposicao.com.br

    • Marcado como Resposta Rafaselic quinta-feira, 18 de julho de 2013 21:04
    quinta-feira, 18 de julho de 2013 20:14
  • Isso vai me ajudar sim.

    Mto bom.

    A única coisa que preciso alterar, eh o seguinte:

    Quando o parametro vier nulo, faço um case no SELECT, para trazer nulo também os campos de Flag.

    Traz a lista de produtos, com todos os Flag's = null.

    Depois vou dar uma pesquisada nesse CROSS JOIN. Ainda não tinha usado esse cara.

    Valeu mesmo pela ajuda.

    quinta-feira, 18 de julho de 2013 21:04