Sql para consulta usando 3 tabelas

Delphi

17/06/2005

Salve pessoal!

estou com dificuldades para fazer a seguinte instrução sql

tenho 3 tabelas

PRODUTO
PRODUTODETALHE
COMPATIVEL
MARCA

Sendo:

PRODUTO
IDPRODUTO - CHAR - 5
DESCRICAO - VARCHAR - 40

PRODUTODETALHE
ID - INTEGER - AUTOINCREMENTO
IDPRODUTO - CHAR - 5
COMPATIVEL - INTEGER

COMPATIVEL
ID - INTEGER - AUTOINCREMENTO
DESCRICAO - VARCHAR - 40
MARCA - INTEGER

MARCA
ID - INTEGER - AUTOINCREMENTO
DESCRICAO - VARCHAR - 30

O meu problema é o seguinte eu tenho que fazer um consulta buscando pela marca do produto ou seja MARCA.DESCRICAO


será que fui claro na minha dúvida ?
se alguem puder me ajudar ...

valewss


Mmoreira

Mmoreira

Curtidas 0

Respostas

Mmoreira

Mmoreira

17/06/2005

faltou uma coisa que nao especifiquei ...

eu tenho que exibir a DESCRICAO DO PRODUTO


GOSTEI 0
Gandalf.nho

Gandalf.nho

17/06/2005

SELECT PRODUTO.* FROM PRODUTO INNER JOIN PRODUTODETALHE ON PRODUTO.IDPRODUTO = PRODUTODETALHE.IDPRODUTO INNER JOIN COMPATIVEL ON PRODUTODETALHE.COMPATIVEL = COMPATIVEL.ID INNER JOIN MARCA ON COMPATIVEL.MARCA = MARCA.ID WHERE MARCA.DESCRICAO = :DESCRICAO



GOSTEI 0
Mmoreira

Mmoreira

17/06/2005

Uma dúvida

este sql que vc me retornou tem um pequeno problema, por exemplo se eu tiver mais de uma compatibilidade cadastrada para o mesmo produto me é retornado varias vezes o mesmo produto ... varias vezes quanto o produto tiver de compatibilidade disponivel ...

eu tentei usar o distinct mas nao deu certo ...

o que eu poderia fazer para resolver isto?


GOSTEI 0
Gandalf.nho

Gandalf.nho

17/06/2005

Veja se funciona com GROUP BY

SELECT PRODUTO.DESCRICAO FROM PRODUTO INNER JOIN PRODUTODETALHE ON PRODUTO.IDPRODUTO = PRODUTODETALHE.IDPRODUTO INNER JOIN COMPATIVEL ON PRODUTODETALHE.COMPATIVEL = COMPATIVEL.ID INNER JOIN MARCA ON COMPATIVEL.MARCA = MARCA.ID  
WHERE MARCA.DESCRICAO = :DESCRICAO
GROUP BY PRODUTO.DESCRICAO



GOSTEI 0
Mmoreira

Mmoreira

17/06/2005

Se eu fizer assim:

SELECT distinct(PRODUTO.*) FROM PRODUTO

ele esta eliminando as duplicidades ...

mas agora tem um outro problema ... se eu tiver um produto cadastrado e se o mesmo nao tiver uma compatibilidade definida este nao aparece no resultado da consulta .... tem como resolver isto?


GOSTEI 0
Mmoreira

Mmoreira

17/06/2005

mas isto só acontece se eu mudar por exemplo:

WHERE produto.descricao like :DESCRICAO

para atribuir um valor para o parametro eu fiz assim:

params[0].asstring := edtBusca.text + ´¬´;

ai acontece o que eu falei .. só é retornado os produtos que tem uma compatibilidade cadastrado


GOSTEI 0
Gandalf.nho

Gandalf.nho

17/06/2005

É que vc falou que queria pesquisar pela marca e como a marca é vinculada a tabela COMPATIVEL, não haveria como achar sem essa tabela estar envolvida. Mas se quiser pegar tudo, use LEFT JOIN ao invés de INNER JOIN


GOSTEI 0
Mmoreira

Mmoreira

17/06/2005

gandalf.nho

muito obrigado pela ajuda, consegui resolver meu problema.

valewss


GOSTEI 0
POSTAR