Ir para conteúdo
Fórum Script Brasil
  • 0

Select com tabelas n para n


rocha_jl

Pergunta

Tenho um banco com alguns relacionamentos n para n. No select que criei consigo trazer o resultado, mas ele está repetindo os dados da tabela principal o número de vezes que possuo registros na tabela de relacionamento. Seria assim:

TABPRODUTO

IDPRODUTO

DESCRICAO

CATEGORIA_HAS_PRODUTO

PRODUTO_IDPRODUTO

CATEGORIA_IDCATEGORIA

CLASSIFICACAO_HAS_PRODUTO

PRODUTO_IDPRODUTO

CLASSIFICACAO_IDCLASSIFICACAO

TABCATEGORIA

IDCATEGORIA

CATEGORIA

TABCLASSIFICACAO

IDCLASSIFICACAO

CLASSIFICACAO

Com o select que fiz, se um produto tiver duas categorias e uma classificação ele traz isso: IDPRODUTO, DESCRICAO, CATEGORIA1, CLASSIFICACAO, IDPRODUTO, DESCRICAO, CATEGORIA2, CLASSIFICACAO. Se eu tenho duas classificações ele vai mostrar 04 vezes. Estou utilizando PHP e colocando o resultado em um array.

Gostaria de saber se isto é o normal ou se há um select onde eu consiga trazer: IDPRODUTO, DESCRICAO, CATEGORIA1, CATEGORIA2, CLASSIFICAO ou IDPRODUTO, DESCRICAO, CATEGORIA1, CATEGORIA2, CLASSIFICAO1, CLASSIFICACAO2.

O select é assim:

"Select * from tabproduto as p

inner join categoria_has_produto as chp on (p.idproduto=chp.produto_idproduto)

inner join categoria as c on (chp.categoria_idcategoria = c.idcategoria)

inner join classificacao_has_produto as clhp on (p.idproduto=clhp.produto_idproduto)

inner join classificacao as cl on (clhp.classificacao_idclassificacao = cl.idclassificacao)

where p.idproduto = 1"

Trazendo o resultado o select está, só gostaria de saber se é normal esta duplicação ou se tem como fazer algo mais limpo.

Grato.

Link para o comentário
Compartilhar em outros sites

1 resposta a esta questão

Posts Recomendados

  • 0
Tenho um banco com alguns relacionamentos n para n. No select que criei consigo trazer o resultado, mas ele está repetindo os dados da tabela principal o número de vezes que possuo registros na tabela de relacionamento. Seria assim:

...

Trazendo o resultado o select está, só gostaria de saber se é normal esta duplicação ou se tem como fazer algo mais limpo.

Grato.

A duplicação é normal, sim. Pois o select retorna o produto cartesiano(os campos do select) da interseção(inner join) dos conjuntos(tabelas) relacionados.

Na segunda parte da pergunta, "se tem como fazer algo mais limpo", a resposta é depende do objetivo de sua consulta. Para o exemplo mostrado em seu post a resposta é não. É melhor tratar via programa.

Link para o comentário
Compartilhar em outros sites

Participe da discussão

Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.

Visitante
Responder esta pergunta...

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emoticons são permitidos.

×   Seu link foi incorporado automaticamente.   Exibir como um link em vez disso

×   Seu conteúdo anterior foi restaurado.   Limpar Editor

×   Você não pode colar imagens diretamente. Carregar ou inserir imagens do URL.



  • Estatísticas dos Fóruns

    • Tópicos
      152,1k
    • Posts
      651,9k
×
×
  • Criar Novo...