Usuário com melhor resposta
Ajuda com consulta

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