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 回答