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

Select concatenando e duplicando colunas


Tales

Pergunta

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 para o comentário
Compartilhar em outros sites

1 resposta a esta questão

Posts Recomendados

  • 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 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,3k
    • Posts
      652,5k
×
×
  • Criar Novo...