Bonjour, je rencontre des problèmes avec ma requête qui combine des enregistrements alors qu'elle ne devrait pas l'être.Regroupement SQL avec plusieurs jointures combinant incorrectement les résultats
J'ai deux tables Auteurs et Publications, elles sont reliées par Publication ID dans une relation many to many. Comme chaque auteur peut avoir de nombreuses publications et chaque publication a beaucoup d'auteurs. Je souhaite que ma requête renvoie chaque publication pour un ensemble d'auteurs et inclue l'ID de chacun des autres auteurs ayant contribué à la publication regroupée dans un seul champ. (Je travaille avec mySQL)
J'ai essayé de l'imaginer graphique ci-dessous
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
Je veux que mon jeu de résultats à la
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
suivante Voici ma requête
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
Mais il retourne à la place
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
Il délivre la sortie désirée lorsqu'il n'y a qu'un seul AuhorID dans l'instruction where. Je n'ai pas été capable de comprendre, est-ce que quelqu'un sait où je vais mal?
Salut, Merci pour votre aide. Lorsque j'ai couru la requête sur un grand échantillon de données et a augmenté le nombre d'auteurs pour rechercher votre solution a été le plus rapide – Matt