Jump to content
Fórum Script Brasil
  • 0

Select concatenando e duplicando colunas


Tales

Question

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:

+----------+-----------+------------+-------------------------+-------+----------------+
| 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!

Link to comment
Share on other sites

1 answer to this question

Recommended Posts

  • 0

'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;

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...