Pregunta

Hola, tengo problemas con mi consulta para combinar registros cuando no debería.

Tengo dos tablas Autores y Publicaciones, están relacionadas por ID de publicación en una relación de muchos a muchos.Como cada autor puede tener muchas publicaciones y cada publicación tiene muchos Autores.Quiero que mi consulta devuelva todas las publicaciones de un conjunto de autores e incluya la identificación de cada uno de los demás autores que han contribuido a la publicación agrupados en un campo.(Estoy trabajando con mySQL)

He intentado imaginármelo gráficamente a continuación.

    Table: authors               Table:publications
AuthorID | PublicationID        PublicationID | PublicationName
    1    |   123                       123    |       A
    1    |   456                       456    |       B
    2    |   123                       789    |       C
    2    |   789
    3    |   123
    3    |   456

Quiero que mi conjunto de resultados sea el siguiente

 AuthorID | PublicationID | PublicationName | AllAuthors
     1    |       123     |        A        |    1,2,3
     1    |       456     |        B        |    1,3
     2    |       123     |        A        |    1,2,3
     2    |       789     |        C        |     2
     3    |       123     |        A        |    1,2,3
     3    |       456     |        B        |    1,3

esta es mi consulta

Select   Author1.AuthorID,
    Publications.PublicationID,
    Publications.PubName,
    GROUP_CONCAT(TRIM(Author2.AuthorID)ORDER BY Author2.AuthorID ASC)AS 'AuthorsAll'
FROM Authors AS Author1
LEFT JOIN Authors AS Author2
ON Author1.PublicationID = Author2.PublicationID
INNER JOIN Publications
ON Author1.PublicationID = Publications.PublicationID
WHERE Author1.AuthorID ="1" OR Author1.AuthorID ="2" OR Author1.AuthorID ="3" 
GROUP BY Author2.PublicationID

Pero en su lugar devuelve lo siguiente

 AuthorID | PublicationID | PublicationName | AllAuthors
     1    |       123     |        A        |    1,1,1,2,2,2,3,3,3
     1    |       456     |        B        |    1,1,3,3
     2    |       789     |        C        |     2

Entrega el resultado deseado cuando solo hay un AuhorID en la declaración donde.No he podido resolverlo, ¿alguien sabe dónde me estoy equivocando?

¿Fue útil?

Solución

Para eliminar duplicados autores, el cambio:

ON Author1.PublicationID = Author2.PublicationID

a:

ON Author1.PublicationID = Author2.PublicationID AND
   Author1.AuthorID <> Author2.AuthorID

Además, el cambio:

GROUP BY Author2.PublicationID

a:

GROUP BY Author1.AuthorID, Author2.PublicationID

Otros consejos

supongo que no estoy seguro de por qué necesita el GROUP BY en el primer lugar. ¿Por qué no se puede utilizar una consulta correlacionada de este modo:

Select   Author1.AuthorID
    ,  Publications.PublicationID
    , Publications.PubName
    , (
        Select GROUP_CONCAT(TRIM(Author2.AuthorID) ORDER BY Author2.AuthorID ASC) 
        From Authors As Author2
        Where Author2.PublicationID = Publications.PublicationID
        ) AS 'AuthorsAll'
FROM Authors AS Author1
    INNER JOIN Publications
        ON Author1.PublicationID = Publications.PublicationID
Where Author1.AuthorId In("1","2","3")
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top