首页 > 解决方案 > 我不确定我的 MySQL GROUP_CONCAT 查询出了什么问题……你能帮我解决吗?

问题描述

我有一个 MySQL 问题,我无法找出解决方案。

我有 2 张桌子

表 1-[书]表

book id | categories | title       | 
   1       |    1,3,5   |  Book 1  | 
   2       |    2,4    |  Book 2   | 
   3       |    1,4    |  Book 3   | 

表 2-【类别】表

category id | category name 
    1       |     Technology
    2       |     Accounting
    3       |     Science
    4       |     Math
    5       |     Chemistry

我需要这样的结果

结果

book id    | categories | title       |   category name
   1       |    1,3,5   |  Book 1  |   Technology,Science,Chemistry
   2       |    2,4     |  Book 2   |   Accounting,Math 
   3       |    1,4     |  Book 3   |   Technology,Math

我尝试了以下查询,但我不确定它有什么问题。

SELECT DISTINCT t1.*,(SELECT GROUP_CONCAT(t2.categoryName) FROM `tbl_category` t2 WHERE t2.id IN (t1.categories)) catColumn FROM tbl_books t1 ORDER BY t1.id DESC

如果我执行以下查询,它将返回我需要的正确值:

SELECT GROUP_CONCAT(categoryName) FROM `tbl_category` t2 WHERE t2.id IN (1,3,5)

结果:

Technology,Science,Chemistry

标签: mysqlsqlcsvjoinsubquery

解决方案


您应该首先努力修复您的架构。您应该有一个单独的表来存储书籍/类别关系,每个元组都位于单独的表行中。在数据库表中存储分隔列表是不好的设计,应始终避免:有关更多详细信息,请参阅这个著名的 SO 问题

不过,对于您当前的设置,我建议使用以下相关子查询find_in_set()

select
    b.*,
    (
        select group_concat(c.category_name)
        from category c
        where find_in_set(c.id, b.categories)
    ) category_names
from book b

推荐阅读