Jump to content
Fórum Script Brasil
  • 0

Select com tabelas n para n


rocha_jl

Question

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 to comment
Share on other sites

1 answer to this question

Recommended Posts

  • 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 to comment
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Answer this question...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.



  • Forum Statistics

    • Total Topics
      152.2k
    • Total Posts
      652k
×
×
  • Create New...