您可以拆分/分解MySQL查询中的字段吗?-问答-阿里云开发者社区-阿里云

开发者社区> 问答> 正文

您可以拆分/分解MySQL查询中的字段吗?

保持可爱mmm 2020-05-10 18:41:55 111

我必须就一些学生的完成情况创建一份报告。每个学生都属于一个客户。这是表格(此问题的简化版)。

CREATE TABLE clients ( clientId int(10) unsigned NOT NULL auto_increment, clientName varchar(100) NOT NULL default '', courseNames varchar(255) NOT NULL default '' ) 该courseNames字段包含课程名称的逗号分隔字符串,例如“ AB01,AB02,AB03”

CREATE TABLE clientenrols ( clientEnrolId int(10) unsigned NOT NULL auto_increment, studentId int(10) unsigned NOT NULL default '0', courseId tinyint(3) unsigned NOT NULL default '0' ) courseId此处的字段是client.courseNames字段中课程名称的索引。因此,如果客户的名称courseNames是“ AB01,AB02,AB03”,而courseId注册的名称是2,则该学生在AB03中。

有什么办法可以对这些包含课程名称的表格进行单选吗?请记住,会有来自不同客户的学生(因此具有不同的课程名称,并非所有课程名称都是连续的,例如:“ NW01,NW03”)

基本上,如果我可以拆分该字段并从结果数组中返回单个元素,那将是我想要的。这就是神奇的伪代码的意思:

SELECT e.studentId, SPLIT(",", c.courseNames)[e.courseId] FROM ...

关系型数据库 MySQL 索引
分享到
取消 提交回答
全部回答(1)
  • 保持可爱mmm
    2020-05-10 18:42:11

    到目前为止,我想将那些逗号分隔的列表保留在我的SQL数据库中-充分了解所有警告!

    我一直认为它们比查找表有优势(查找表为标准化数据库提供了一种方法)。经过几天的拒绝,我看到了曙光:

    当在一个字段中使用逗号分隔的值时,使用查找表不会比丑陋的字符串操作引起更多的代码。 查找表允许使用本机数字格式,因此不能大于这些csv字段。虽然是更小。 所涉及的字符串操作在高级语言代码(SQL和PHP)中比较薄,但是与使用整数数组相比,开销很大。 数据库并不是人类可读的,并且像我所做的那样,试图坚持使用结构通常是愚蠢的,因为它们具有可读性/直接可编辑性。 简而言之,MySQL中没有本机SPLIT()函数是有原因的。来源:stack overflow

    0 0
数据库
使用钉钉扫一扫加入圈子
+ 订阅

分享数据库前沿,解构实战干货,推动数据库技术变革

推荐文章
相似问题