条件为以逗号分隔的字段与 ID 相匹配的 MySQL JOIN 写法

本文涉及的产品
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
云数据库 RDS PostgreSQL,高可用系列 2核4GB
RDS MySQL Serverless 高可用系列,价值2615元额度,1个月
简介: 条件为以逗号分隔的字段与 ID 相匹配的 MySQL JOIN 写法

在产品管理的场景中,我们需要对产品进行打标,因此我们可做以下的数据表结构:

产品表(tbproduct):

id

产品Id

product_name

产品名

label_ids

标签ID

标签表(tblabel):

id

标签ID

label_name

标签名

建表SQL:

CREATE TABLE `tbproduct` (
 `id` int NOT NULL AUTO_INCREMENT COMMENT '产品ID',
 `product_name` varchar(50) NULL COMMENT '产品名',
 `label_ids` varchar(50) NULL COMMENT '标签ID',
 PRIMARY KEY (`id`)
) ENGINE=InnoDB
DEFAULT CHARACTER SET=utf8
COMMENT='产品表';
CREATE TABLE `tblabel` (
 `id` int NOT NULL AUTO_INCREMENT COMMENT '标签ID',
 `label_name` varchar(50) NULL COMMENT '标签名',
 PRIMARY KEY (`id`)
) ENGINE=InnoDB
DEFAULT CHARACTER SET=utf8
COMMENT='标签表';


初始化数据:

-- 插入标签
INSERT INTO `mumuzxdb`.`tblabel` (`label_name`) VALUES ('海外代购');
INSERT INTO `mumuzxdb`.`tblabel` (`label_name`) VALUES ('国产');
INSERT INTO `mumuzxdb`.`tblabel` (`label_name`) VALUES ('数码');
INSERT INTO `mumuzxdb`.`tblabel` (`label_name`) VALUES ('生鲜');
INSERT INTO `mumuzxdb`.`tblabel` (`label_name`) VALUES ('零食');
-- 插入产品
INSERT INTO `mumuzxdb`.`tbproduct` (`product_name`,`label_ids`) VALUES ('鲜桃花','2,4');
INSERT INTO `mumuzxdb`.`tbproduct` (`product_name`,`label_ids`) VALUES ('旺仔牛奶','2,5');
INSERT INTO `mumuzxdb`.`tbproduct` (`product_name`,`label_ids`) VALUES ('Iphone14','1,3');
INSERT INTO `mumuzxdb`.`tbproduct` (`product_name`,`label_ids`) VALUES ('雅诗兰黛','1');
INSERT INTO `mumuzxdb`.`tbproduct` (`product_name`,`label_ids`) VALUES ('红茶','1,2,5');


此时我们想将每个产品的标签数据查询出来,那么SQL如下:

SELECT
    t1.id,
    t1.product_name,
    GROUP_CONCAT( t2.label_name SEPARATOR "-" ) AS label_names,
 t1.label_ids
FROM
    tbproduct t1
    LEFT JOIN `tblabel` t2 ON FIND_IN_SET( t2.id, t1.label_ids )
GROUP BY
    t1.`id`


结果如下:

image.png

其中标签表结果:

image.png

相关实践学习
每个IT人都想学的“Web应用上云经典架构”实战
本实验从Web应用上云这个最基本的、最普遍的需求出发,帮助IT从业者们通过“阿里云Web应用上云解决方案”,了解一个企业级Web应用上云的常见架构,了解如何构建一个高可用、可扩展的企业级应用架构。
MySQL数据库入门学习
本课程通过最流行的开源数据库MySQL带你了解数据库的世界。   相关的阿里云产品:云数据库RDS MySQL 版 阿里云关系型数据库RDS(Relational Database Service)是一种稳定可靠、可弹性伸缩的在线数据库服务,提供容灾、备份、恢复、迁移等方面的全套解决方案,彻底解决数据库运维的烦恼。 了解产品详情: https://www.aliyun.com/product/rds/mysql 
相关文章
|
3月前
|
关系型数据库 MySQL
MySQL数据表添加字段(三种方式)
本文解析了数据表的基本概念及字段添加方法。在数据表中,字段是纵向列结构,记录为横向行数据。MySQL通过`ALTER TABLE`指令支持三种字段添加方式:1) 末尾追加字段,直接使用`ADD`语句;2) 首列插入字段,通过`FIRST`关键字实现;3) 指定位置插入字段,利用`AFTER`指定目标字段。文内结合`student`表实例详细演示了每种方法的操作步骤与结构验证,便于理解与实践。
|
6月前
|
人工智能 关系型数据库 MySQL
解决MySQL自增id用尽的问题
本文介绍了解决文章点击记录表(`article_click_record`)数据量激增问题的方案。由于用户量大,每天新增约400万条记录,导致表id接近溢出(2,100,000,000),且占用空间超320G。解决方案包括:1) 新建`article_click_record_new`表,将id类型改为BIGINT以避免溢出;2) 过渡阶段同时写入新旧表,待旧表id溢出后切换至新表;3) 定时清理过期数据或转移旧表内容。实现方式涉及修改相关接口和服务逻辑,确保业务平稳过渡。
157 5
|
7月前
|
算法 关系型数据库 MySQL
join查询可以⽆限叠加吗?MySQL对join查询有什么限制吗?
大家好,我是 V 哥。本文详细探讨了 MySQL 中 `JOIN` 查询的限制及其优化方法。首先,`JOIN` 查询不能无限叠加,存在资源(CPU、内存、磁盘 I/O)、性能和语法等方面的限制。过多的 `JOIN` 操作会导致数据库性能急剧下降。其次,介绍了三种常见的 `JOIN` 查询算法:嵌套循环连接(NLJ)、索引嵌套连接(INL)和基于块的嵌套循环连接(BNL),并分析了它们的触发条件和性能特点。最后,分享了优化 `JOIN` 查询的方法,包括 SQL 语句优化、索引优化、数据库配置调整等。关注 V 哥,了解更多技术干货,点赞👍支持,一起进步!
142 3
|
9月前
|
存储 关系型数据库 MySQL
MySQL主键谁与争锋:MySQL为何钟爱自增主键ID+UUID?
本文深入探讨了在MySQL中使用自增类型主键的优势与局限性。自增主键通过保证数据的有序性和减少索引维护成本,提升了查询和插入性能,简化了数据库管理和维护,并提高了数据一致性。然而,在某些业务场景下,如跨表唯一性需求或分布式系统中,自增主键可能无法满足要求,且存在主键值易预测的安全风险。因此,选择主键类型时需综合考虑业务需求和应用场景。
292 2
|
10月前
|
分布式计算 关系型数据库 MySQL
SpringBoot项目中mysql字段映射使用JSONObject和JSONArray类型
SpringBoot项目中mysql字段映射使用JSONObject和JSONArray类型 图像处理 光通信 分布式计算 算法语言 信息技术 计算机应用
186 8
|
10月前
|
监控 关系型数据库 MySQL
MySQL自增ID耗尽应对策略:技术解决方案全解析
在数据库管理中,MySQL的自增ID(AUTO_INCREMENT)属性为表中的每一行提供了一个唯一的标识符。然而,当自增ID达到其最大值时,如何处理这一情况成为了数据库管理员和开发者必须面对的问题。本文将探讨MySQL自增ID耗尽的原因、影响以及有效的应对策略。
453 3
|
10月前
|
存储 监控 关系型数据库
MySQL自增ID耗尽解决方案:应对策略与实践技巧
在MySQL数据库中,自增ID(AUTO_INCREMENT)是一种特殊的属性,用于自动为新插入的行生成唯一的标识符。然而,当自增ID达到其最大值时,会发生什么?又该如何解决?本文将探讨MySQL自增ID耗尽的问题,并提供一些实用的解决方案。
341 1
|
10月前
|
关系型数据库 MySQL 索引
MySQL的group by与count(), *字段使用问题
正确使用 `GROUP BY`和 `COUNT()`函数是进行数据聚合查询的基础。通过理解它们的用法和常见问题,可以有效避免查询错误和性能问题。无论是在单列分组、多列分组还是结合其他聚合函数的场景中,掌握这些技巧和注意事项都能大大提升数据查询和分析的效率。
927 0
|
10月前
|
关系型数据库 MySQL Java
SpringBoot项目中mysql字段映射使用JSONObject和JSONArray类型
SpringBoot项目中mysql字段映射使用JSONObject和JSONArray类型
177 0
|
11月前
|
SQL 存储 关系型数据库
MySQL新增字段/索引会不会锁表?
MySQL新增字段/索引会不会锁表?
945 0

推荐镜像

更多