Объединение и печать результатов поиска столбца с несколькими значениями в ячейке

У меня есть 3 базы данных, подробности следующие.

Я хочу распечатать все столбцы в базе данных books_db, а также жанр каждой книги одновременно.

Книга может относиться к нескольким жанрам, поэтому я присвоил каждому жанру уникальный идентификатор.
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;

person iridescent    schedule 19.05.2013    source источник


Ответы (1)


Я считаю, что вам не хватает оператора 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;
person Simon Forsberg    schedule 19.05.2013
comment
Большое спасибо. Думаю, я переосмыслил подзапросы :P. - person iridescent; 19.05.2013