SQLグループ化して複数が誤った結果を組み合わせる合流します
-
23-09-2019 - |
質問
こんにちは、私はとき、それはいけない、私のクエリは、レコードを組み合わせることで問題を抱えています。
私は2つのテーブルの著者と出版物を持って、彼らは多くの関係に多くので発行IDによって関連しています。各著者は、多くの出版物を持つことができ、それぞれの出版物は、多くの作家を持っていたよう。私は私のクエリは、著者のセットごとに出版を返すようにしたいとつのフィールドに分類出版に貢献してきた他の作家のそれぞれのIDが含まれます。 (私はMySQLで働いています)。
私はグラフィック
の下にそれを想像しようとしています 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
私は私の結果セットは、次のようにしたい。
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
これは私のクエリ
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
しかし、それは代わりに、次の
を返します。 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
これはどこのステートメントで唯一のAuhorIDがあるときに所望の出力を提供しません。 私は間違って行くよどこ誰もが知っている私は、それを把握することができていませんか?
解決
:重複した作家、変更を排除するために
ON Author1.PublicationID = Author2.PublicationID
と
ON Author1.PublicationID = Author2.PublicationID AND
Author1.AuthorID <> Author2.AuthorID
また、変更:
GROUP BY Author2.PublicationID
と
GROUP BY Author1.AuthorID, Author2.PublicationID
他のヒント
私は、あなたが最初の場所でGROUP BYを必要とする理由私はわからないとします。
:なぜあなたはそうのような相関サブクエリを使用することができませんでした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")
所属していません StackOverflow