我有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;
最佳答案
我相信您缺少的是 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;
关于mysql - 连接并打印单元格中具有多个值的列的搜索结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16633966/