0

我需要来自两个表的结果集,其中一个表有一个名为 Subjects 的字段,其中包含一组值(1、2、3 等)。这些值将与主题表中的 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
4

2 回答 2

2
SELECT Students.ID, Students.FNAME, GROUP_CONCAT(Subjects.SUBJECT) 
FROM Students, Subjects 
WHERE Students.SUBJECTS LIKE CONCAT('%',Subjects.ID,'%') 
GROUP BY Students.ID;

看我的 sqlfidde

请注意,这是非常低效的。您真的应该创建一个交叉引用表并使用 normal JOINS

find_in_set正如 Gordon Linoff 指出的那样,使用至少适用于 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;

改进的小提琴

于 2013-04-26T20:05:47.603 回答
1

一个很好的 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。第三个表是将这些信息存储在关系数据库中的正确方法。

于 2013-04-26T20:15:21.060 回答