Fórum Sql para consulta usando 3 tabelas #285087

17/06/2005

0

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

Responder

Posts

17/06/2005

Mmoreira

faltou uma coisa que nao especifiquei ...

eu tenho que exibir a DESCRICAO DO PRODUTO


Responder

Gostei + 0

17/06/2005

Gandalf.nho

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



Responder

Gostei + 0

17/06/2005

Mmoreira

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?


Responder

Gostei + 0

17/06/2005

Gandalf.nho

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



Responder

Gostei + 0

17/06/2005

Mmoreira

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?


Responder

Gostei + 0

17/06/2005

Mmoreira

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


Responder

Gostei + 0

18/06/2005

Gandalf.nho

É 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


Responder

Gostei + 0

20/06/2005

Mmoreira

gandalf.nho

muito obrigado pela ajuda, consegui resolver meu problema.

valewss


Responder

Gostei + 0

Utilizamos cookies para fornecer uma melhor experiência para nossos usuários, consulte nossa política de privacidade.

Aceitar