2

私は3つのデータベースを持っています。詳細は次のとおりです。

books_db データベースのすべての列と各本のジャンルを同時に印刷したいと考えています。

本は複数のジャンルに分類される可能性があるため、各ジャンルに固有の ID を割り当てました。
Genre_ID 1 - スリラー、Genre_ID 2 - アドベンチャーなど。

--- books_db -----------
    ID          (int AI)
    Book_title  (varchar)
    Author      (varchar)


--- genre_link_db ------
    ID_Books    (int)
    Genre_ID    (int)


--- genre_db -----------
    Genre_ID    (int)
    Genre       (varchar)   

ここまでで、この SQL ステートメントをコーディングすることができました。それは機能しますが、グループ concat() がすべてのジャンルを連結し、次の検索結果の新しい行を出力しないため、最初の検索結果に対してのみ機能します。

以下の例では、すべての結果を表示するはずの '%' のように試してみると、ジャンルが正しく印刷された 1 つの結果のみが表示されます。

SELECT *, group_concat(T2.Genre separator ', ') AS GENRE_RESULT 
FROM (SELECT * FROM books_db WHERE Book_title like '%') AS T1 
JOIN (SELECT ID_Books, Genre from genre_link_db INNER JOIN genre_db ON genre_link_db.Genre_ID = genre_db.Genre_ID ) AS T2   
ON T1.ID = T2.ID_Books;
4

1 に答える 1

3

あなたが見逃しているのはGROUP BYステートメントだと思います。

クエリの結合部分も書き直します。ここでは副選択は必要ないと思います。

このようなことは、私がやったことです:

SELECT *, group_concat(T2.Genre separator ', ') AS GENRE_RESULT 
FROM books_db AS T1 
JOIN genre_link_db ON genre_link_db.ID_books = T1.ID
JOIN genre_db AS T2 ON genre_link_db.Genre_ID = T2.Genre_ID
WHERE books_db.Book_title like '%'
GROUP BY T1.ID;
于 2013-05-19T11:09:05.047 に答える