原代码块
SELECT
psn_name AS '巡检员姓名',
mobile AS '电话'
FROM
j*_b**_person
WHERE
tenant_id = 28
AND psn_id in (select ri_user_ids from j**s_ri_strategy where tenant_id =28 and use_status = 0)
执行结果
子查询中实际查询出连个结果
select ri_user_ids from jgmes_qc_ri_strategy where tenant_id =28 and use_status = 0
产生原因:
是因为 mysql 中 执行 in函数时会将参数中的字符串通过 CAST(‘1040,1216’ AS SIGNED) 方法优化取得第一个参数,所以执行后的结果就是第一个。
解决方案
将两个表连接起来,然后用 FIND_IN_SET(str, strList)方法获取即可
SELECT
psn_name AS '巡检员姓名',
mobile AS '电话'
FROM
j*_b**_person jp, j**s_ri_strategy js
WHERE
jp.tenant_id = 28
AND js.use_status =0
AND FIND_IN_SET(jp.psn_id,js.ri_user_ids )
最终执行结果