MySQL 使用子查询选择

标签 mysql

我在数据库中有2个表:mainTable和classificationTable:

主表:

id  |   classification_id   |   name
---------------------------------------
1   |           1           |   Name1
2   |           2,3,4       |   Name2
3   |           1,4         |   Name3
4   |           4           |   Name4

分类表:

classification_id   |   class_name
---------------------------------------
        1           |   Class Name1
        2           |   Class Name2
        3           |   Class Name3
        4           |   Class Name4

我想从 mainTable 中选择 ID 为 3 的行,例如:

id          =   3
class_name  =   Class Name1, Class Name4
Name        =   Name3

我尝试此选择,但这仅返回数组中的第一个元素(例如,对于 ID 为 3 的行,这仅返回类名称 1)

SELECT i.*, 
(SELECT GROUP_CONCAT(cl.class_name) FROM classificationTable as cl WHERE cl.classification_id IN(i.classification_id)) as class_name 
FROM mainTable as i;

请帮忙。

最佳答案

是的,您的数据库设计得很糟糕。但你可以做你想做的事。

这需要两个步骤。第一种方法是通过查找 mainTable 列表中的每个classification_id 将 mainTable 连接到classificationTable。您可以使用 like 运算符来执行此操作。

第二步是将所有类名放回到一列中。这是使用 group_concat 处理的。

以下查询完成此操作(尽管尚未经过测试,因此可能有拼写错误):

select mt.id, mt.name, group_concat(ct.class_name separator ', ')
from mainTable mt join
     classificationTable ct
     on concat(',', classification_id, ',') like concat('%,', ct.classification_id, ',%')
group by mt.id, mt.name

关于MySQL 使用子查询选择,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13689701/

相关文章:

php - php根据id添加数据库字段

mysql - 显示订单总数以及订单号所售出的产品数量

MySQL 使用 IN 和 LIKE 通配符查找数据

php - double mysql_fetch_array(从其他表获取数据获取数据)/nest

mysql - 使用 Knex 动态迁移和播种数据库?

mysql远程ssl

php - 如何同时提交多个回复(问卷工具)

mysql 查询组并显示可能的值

php - CodeIgniter 一条查询多条语句

php - 未定义索引 : in PHP codeigniter while sending variable