Mysql 在单个字段中列出值数组相关记录的SQL查询

Mysql 在单个字段中列出值数组相关记录的SQL查询,mysql,sql,arrays,Mysql,Sql,Arrays,我需要两个表的结果集,其中一个表有一个名为Subjects的字段,该字段带有一个值数组(1、2、3等)。这些值将与Subjects表中的PK匹配。我需要用主题名称替换数值 给出两个表格: 学生: ID:100,FNAME:Steve,SUBJECTS:2,3 ID:101,FNAME:Billy,SUBJECTS:1,2 主题: ID:1,SUBJECT:Math ID:2,SUBJECT:Reading ID:3,SUBJECT:Spelling 需要SQL语法来生成: ID:100,FN

我需要两个表的结果集,其中一个表有一个名为Subjects的字段,该字段带有一个值数组(1、2、3等)。这些值将与Subjects表中的PK匹配。我需要用主题名称替换数值

给出两个表格:

学生:

ID:100,FNAME:Steve,SUBJECTS:2,3
ID:101,FNAME:Billy,SUBJECTS:1,2
主题:

ID:1,SUBJECT:Math
ID:2,SUBJECT:Reading
ID:3,SUBJECT:Spelling
需要SQL语法来生成:

ID:100,FNAME:Steve,SUBJECTS:Reading, Spelling
ID:101,FNAME:Billy,SUBJECTS:Math, Reading

请注意,这是非常低效的。您应该使用普通的
连接创建一个交叉引用表

正如Gordon Linoff指出的,使用
find_in_set
可能更好,至少对MySql有效:

SELECT Students.ID, Students.FNAME, GROUP_CONCAT(Subjects.SUBJECT separator ', ') 
FROM Students join
     Subjects
     on find_in_set(subjects.id, students.subjects) > 0
GROUP BY Students.ID;

请注意,这是非常低效的。您应该使用普通的
连接创建一个交叉引用表

正如Gordon Linoff指出的,使用
find_in_set
可能更好,至少对MySql有效:

SELECT Students.ID, Students.FNAME, GROUP_CONCAT(Subjects.SUBJECT separator ', ') 
FROM Students join
     Subjects
     on find_in_set(subjects.id, students.subjects) > 0
GROUP BY Students.ID;

一个很好的MySQL方法是:

SELECT Students.ID, Students.FNAME, GROUP_CONCAT(Subjects.SUBJECT separator ', ') 
FROM Students join
     Subjects
     on find_in_set(subject.id, students.subjects) > 0
GROUP BY Students.ID;

但是,您的数据结构只需要一个StudentSubjects表,而不是将主题列表存储为ID。第三个表是在关系数据库中存储此信息的正确方法。

MySQL的一个好方法是:

SELECT Students.ID, Students.FNAME, GROUP_CONCAT(Subjects.SUBJECT separator ', ') 
FROM Students join
     Subjects
     on find_in_set(subject.id, students.subjects) > 0
GROUP BY Students.ID;

但是,您的数据结构只需要一个StudentSubjects表,而不是将主题列表存储为ID。第三个表是在关系数据库中存储这些信息的正确方法。

您尝试过什么吗?你能给我们看一些代码吗?你使用的是什么数据库?你能改变模式并创建一个交叉引用表吗?你能坚持使用那个表模式吗?或者你能把它烧成灰烬然后重新开始吗?数组实际上是一个
还是一个串联字符串?你试过什么了吗?您可以向我们展示任何代码吗?您使用的是什么数据库?您可以更改模式并创建一个交叉引用表吗?您是否坚持使用该表模式,或者您是否可以将其彻底销毁并重新开始?该“数组”实际上是一个
还是一个串联字符串?SqlFIDLE与OP要求的不匹配。luksch,这很有效。我得到的信息是它效率低下,所以我将致力于normalization.BTW,stackOverflow的长期用户,但这是我的第一个问题。我不知道专家们会这么快就抓住这个问题,非常感谢你们的投入。我的专长是使用Alpha Five构建网络/移动应用程序,但SQL技能较低。@Marichyasana我建议您改进它!sqlfiddle与OP要求的不匹配。luksch工作得很好。我得到的信息是它效率低下,所以我将致力于normalization.BTW,stackOverflow的长期用户,但这是我的第一个问题。我不知道专家们会这么快就抓住这个问题,非常感谢你们的投入。我的专长是使用Alpha Five构建网络/移动应用程序,但SQL技能较低。@Marichyasana我建议您改进它!