Tenho duas tabelinhas … uma de produto e outra de grupo de produtos…sendo que um produtos não é obrigatório ter um grupo…
Então… na tabela de produto eu tenho um campo chamado cdGrupo …onde este relaciona produto a grupo…
porém tenho que fazer uma pesquisa sql para listar os produtos e trazer junto a descrição do grupo…
o meu sql está assim…
SELECT PRODUTO.CDPRODUTO,
PRODUTO.DESCRICAO,
GRUPO.DESCRICAO AS DESC_GRUPO
FROM PRODUTO, GRUPO
WHERE PRODUTO.CDGRUPO = GRUPO.CDGRUPO
ORDER BY PRODUTO.DESCRICAO
porém os produtos que não possuem grupos não são listados… como faço para retornar também os produtos que não tem grupos?
Se você estiver usando MySQL e caso queira ver todos os relacionamento até mesmo um grupo sem produtos você pode usar um RIGHT JOIN + UNION + LEFT JOIN.
Caso seja outro SGBD busque por FULL JOIN
Exemplo MySQL:
SELECT p.id, p.nome, g.descricao AS DESC_GRUPO from produtos p
LEFT join grupo_produto g ON (p.cdgrupo=g.id)
UNION
SELECT p.id, p.nome, g.descricao AS DESC_GRUPO from produtos p
RIGHT join grupo_produto g ON (p.cdgrupo=g.id)
Como minhas tabelas tem campos diferentes do seu, somente faça a adaptação dos mesmos.
Como o AbelBueno disse, você deve utilizar um LEFT JOIN.
Por que?
Simples, o LEFT indica que os elementos que estão na tabela “à esquerda” não são fundamentais. Eles devem ser carregados na consulta se e somente se existirem. Independente disso, os elementos da tabela “à direita” devem ser, sempre, carregados na consulta.
[quote=drsmachado]
Simples, o LEFT indica que os elementos que estão na tabela “à esquerda” não são fundamentais. Eles devem ser carregados na consulta se e somente se existirem. Independente disso, os elementos da tabela “à direita” devem ser, sempre, carregados na consulta.[/quote]
Só se eu não entendi direito sua explicação, mas, os elementos a esquerda são da tabela produtos ( FROM Produtos Prod LEFT JOIN Grupos Grp ). Logo eles são os elementos que o Left irá retornar mesmo que não tenham um valor referente na tabela grupo.
Quanto ao meu exemplo é como eu disse: "… Se você estiver usando MySQL e caso queira ver todos os relacionamento até mesmo um grupo sem produtos …"
Mas para oq ele quer a sentença do AbelBueno é a necessária.