我有两个表,分别是tb_student(id,名称,年龄,性别)和tb_course(id,名称列表,标题)。

例如,tb_student数据为:

id  name   age sex
1   Tommy  11   1
2   Marry  11   0
3   Mike   11   1
4   Lucy   10   0


而tb_course数据为:

id  namelist    title
1   Tommy,Lucy  math
2   Marry,Tommy English


现在,如果我想让选择数学的学生,我可以将sql编写为:

select * from tb_student where
FIND_IN_SET(name,(select namelist from tb_course where title='math'));


可以,返回“ Tommy”和“ Lucy”。

但是现在,如果我有一个叫Tom的学生,而他没有选择数学,我的sql也将返回Tom

如何更改我的代码?我是否需要定义一个循环名称列表的函数?

最佳答案

最好的方法是规范化您的数据。但是您可以通过添加,来解决此问题。
这样,您搜索TOM而不是,TOM,

SELECT tb_student.*
FROM tb_student
JOIN tb_course
  ON concat(',', namelist, ',') LIKE
                   concat('%,', NAME, ',%') ;

关于mysql - 如何在MySQL的字符串列表中选择关键字?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/33810147/

10-10 12:56