Sql para consulta usando 3 tabelas
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
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
Curtidas 0
Respostas
Mmoreira
17/06/2005
faltou uma coisa que nao especifiquei ...
eu tenho que exibir a DESCRICAO DO PRODUTO
eu tenho que exibir a DESCRICAO DO PRODUTO
GOSTEI 0
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
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?
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
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
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?
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
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
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
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
17/06/2005
gandalf.nho
muito obrigado pela ajuda, consegui resolver meu problema.
valewss
muito obrigado pela ajuda, consegui resolver meu problema.
valewss
GOSTEI 0