情景描述:要求是查找指定班级对应的课程。表的结构是,班级表class中的一个字段course_ids用于存储course表的id。
我的思路很简单,select查找course表,然后使用in嵌套一个子查询查询出所有的id。
所以第一次的代码是这样的:
SELECT
*
FROM
course cou
WHERE
cou.id IN (
SELECT
c.course_ids
FROM
class c
WHERE
c.product_id = '1'
);
结果确实只查找出来id=1的那一条数据。
原因是:在mysql的in里边如果是字符串的话,会自动转换成int,从其他地方看的。
修改后的代码:
SELECT
*
FROM
course cou
WHERE
find_in_set(cou.id,(
SELECT
c.course_ids
FROM
class c
WHERE
c.product_id = '1'
));
这样子得到的结果就是对的。
就是因为使用了find_in_set函数,关于这个函数自己搜吧。(!-!)