我的表中有一列称为student_id,并且在该列中存储与特定记录关联的学生ID,并用|字符分隔。以下是该列中数据的几个示例条目:

 243|244|245
 245|1013|289|1012
 549|1097|1098|245|1099


我需要编写一个SQL查询,该查询将返回student_id为245的记录。任何帮助将不胜感激。

最佳答案

不要在student_id字段中存储多个值,因为First Normal Form的要求是每个行和列的交点只有一个值。出于很多原因,这是一件好事,但显而易见的一个原因是,它解决了必须处理student_id为“ 1245”的情况。

相反,最好有一个单独的表来存储与此表中的记录关联的学生ID。例如(您也想向该表定义添加适当的约束),

CREATE TABLE mytable_student_id (
   mytable_id INTEGER,
   student_id INTEGER
);


然后,您可以使用联接进行查询:

SELECT * FROM mytable JOIN mytable_student_id
   ON (mytable.id=mytable_student_id.mytable_id) WHERE mytable_student_id.student_id = 245


请注意,由于除了包含student_id字段之外,您没有发布任何有关原始表的架构详细信息,因此在本示例中,我将其称为mytable(并假定它具有一个称为id-具有主键是1NF的另一个要求。

10-07 17:47