【问题标题】:Joining and printing search results of a column with multiple values in a cell连接和打印单元格中具有多个值的列的搜索结果
【发布时间】:2013-05-14 02:13:54
【问题描述】:

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

【问题讨论】:

    标签: mysql sql inner-join jointable


    【解决方案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;
    

    【讨论】:

    • 非常感谢。我想我过度考虑了子选择:P。
    猜你喜欢
    • 2017-10-01
    • 1970-01-01
    • 2014-05-14
    • 1970-01-01
    • 2021-10-06
    • 1970-01-01
    • 2012-01-10
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多