原代码块
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
)
最终执行结果