mysql - 连接并打印单元格中具有多个值的列的搜索结果

标签 mysql sql inner-join join

我有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/

相关文章:

php - 在 For 循环中运行查询

mysql - 如何根据查询从组中获取基于最新日期的最高价格

php - 从 MySQL 中的日期详细信息构建文本字符串

sql-server - SQL server ERROR 列名不明确

mysql - SQL:按一列中相同值的数量排序,无需聚合/收缩

具有连接数和案例数的 Mysql 查询 - 添加更多连接和子查询

mysql - 这个mysql查询有什么问题?

c# - 使用 Microsoft.SqlServer.Management.Smo 从 StoredProc 获取结果列而不执行它

php - MySQL表中的多个连接

python - 分析异常: Using PythonUDF in join condition of join type LeftSemi is not supported