gpt4 book ai didi

MySQL 使用子查询选择

转载 作者:行者123 更新时间:2023-11-29 08:41:30 25 4
gpt4 key购买 nike

我在数据库中有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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com