我有两个表,分别是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/