原因 IN()不适用于表列,仅针对()内的列表
解决方案:用 find_in_set
SQL建表语句见
-- 主表单个字段多id,对应子表多id(此时子查询 in 失效)
SELECT
a.*,(
SELECT
GROUP_CONCAT( CONCAT_WS( ',', b.courseware_name ) SEPARATOR ',' ) AS courseware_name
FROM
edu_test_son b
WHERE
b.courseware_type IN ( a.courseware_types )) AS coursewareName
FROM
edu_test a;
-- 主表单个字段多id,对应子表多id (子查询把 in 改为 FIND_IN_SET 即可)
SELECT
a.*,(
SELECT
GROUP_CONCAT( CONCAT_WS( ',', courseware_name ) SEPARATOR ',' ) AS courseware_name
FROM
edu_test_son b
WHERE
FIND_IN_SET( b.courseware_type, a.courseware_types )) AS coursewareName
FROM
edu_test a;
由于 "courseware_types" 字段具有逗号分隔的ID,因此可以使用 find_in_set