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?
FROM Produtos Prod LEFT JOIN Grupos Grp ON Prod.cd_grupo = Grp.cd_grupo
E tira o WHERE do seu sql.
Você está usando um INNER JOIN e ele só retorna quando encontra registros dos “dois lados”.
ttelsen
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.
drsmachado
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.
ttelsen
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.
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.