質問

こんにちは、私はとき、それはいけない、私のクエリは、レコードを組み合わせることで問題を抱えています。

私は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")
ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top