Tales Posted January 24, 2012 Report Share Posted January 24, 2012 Olá pessoal!Sou novato em mysql, e gostaria de saber se vocês poderia me ajudar sanando uma dúvida:Imaginem um sistema de cadastro de livros, onde temos 3 tabelas:livro: id_livro, nome_livroautor: id_autor, nome_autor, id_livroautoria: id_autoria, id_livro, id_autorImagina que existam os três livros:Chapeuzinho Vermelho, autoria: MariaJoão e o pé de feijão, autoria: Luiz e JoséPiadas, autoria: Maria e LuizAssim eu teria as tabelas preenchida com os seguintes valoreslivro:1 Chapeuzinho Vermelho2 João e o pé de feijão3 Piadasautor:1 Maria2 Luiz3 JoséAutoria1 1 12 2 23 2 34 3 15 3 2Caso eu faça um select com natural join, eu teria uma saídamysql> select * from autoria natural join livro natural join autor;Isso resultaria de uma saída com linhas repetidas, devido aos livros que possuem mais de 1 autor. Seria uma saída do tipo:+----------+-----------+------------+-------------------------+-------+----------------+ | title_id | author_id | autoria_id | title | pages | author | +----------+-----------+------------+-------------------------+-------+----------------+ | 1 | 1 | 1 | Linux in a nutshell | 112 | Ellen Siever | | 1 | 2 | 2 | Linux in a nutshell | 112 | Aaaron Weber | | 2 | 3 | 3 | Classic Shell Scripting | 323 | Arnold Robbins | | 2 | 4 | 4 | Classic Shell Scripting | 323 | Nelson Beebe | +----------+-----------+------------+-------------------------+-------+----------------+ Eu gostaria de saber o seguinte: Há alguma forma de, no caso desses registros que possuem mais de 1 autor, ter uma saída como abaixo: +----------+-----------+------------+-------------------------+-------+----------------+----------------+ | title_id | author_id | autoria_id | title | pages | author | author | +----------+-----------+------------+-------------------------+-------+----------------+----------------+ | 1 | 1 | 1 | Linux in a nutshell | 112 | Ellen Siever | Aaaron Weber | | 2 | 3 | 3 | Classic Shell Scripting | 323 | Arnold Robbins | Nelson Beebe | +----------+-----------+------------+-------------------------+-------+----------------+----------------+Ou seja, eu gostaria que o mysql duplicasse n vezes a coluna autor, para cada registro que eu tivesse com o mesmo id do título da obra.Tentei fazer um grupo by e um left join, porém nenhum deles teve uma saída satisfatória.Agradeço a atenção!Um abraço! Quote Link to comment Share on other sites More sharing options...
0 Denis Courcy Posted January 25, 2012 Report Share Posted January 25, 2012 'Tales'Use GROUP_CONCAT.Assim:SELECT l.nome_livro, GROUP_CONCAT(a.nome_autor) as `Autor(es)` FROM livro l INNER JOIN autoria at ON at.id_livro = l.id_livro INNER JOIN autor a ON a.id_autor = at.id_autor GROUP BY l.nome_livro; Quote Link to comment Share on other sites More sharing options...
Question
Tales
Olá pessoal!
Sou novato em mysql, e gostaria de saber se vocês poderia me ajudar sanando uma dúvida:
Imaginem um sistema de cadastro de livros, onde temos 3 tabelas:
livro: id_livro, nome_livro
autor: id_autor, nome_autor, id_livro
autoria: id_autoria, id_livro, id_autor
Imagina que existam os três livros:
Chapeuzinho Vermelho, autoria: Maria
João e o pé de feijão, autoria: Luiz e José
Piadas, autoria: Maria e Luiz
Assim eu teria as tabelas preenchida com os seguintes valores
livro:
1 Chapeuzinho Vermelho
2 João e o pé de feijão
3 Piadas
autor:
1 Maria
2 Luiz
3 José
Autoria
1 1 1
2 2 2
3 2 3
4 3 1
5 3 2
Caso eu faça um select com natural join, eu teria uma saída
mysql> select * from autoria natural join livro natural join autor;
Isso resultaria de uma saída com linhas repetidas, devido aos livros que possuem mais de 1 autor. Seria uma saída do tipo:
Eu gostaria de saber o seguinte: Há alguma forma de, no caso desses registros que possuem mais de 1 autor, ter uma saída como abaixo:Ou seja, eu gostaria que o mysql duplicasse n vezes a coluna autor, para cada registro que eu tivesse com o mesmo id do título da obra.
Tentei fazer um grupo by e um left join, porém nenhum deles teve uma saída satisfatória.
Agradeço a atenção!
Um abraço!
Link to comment
Share on other sites
1 answer to this question
Recommended Posts
Join the conversation
You can post now and register later. If you have an account, sign in now to post with your account.