所以我有一个格式类似于;1;;2;的数据然后我需要在查询中使用这个数字,所以我想将其转换为 1,2 并在 IN 条件中使用它。在我的表中,结果应返回 2 行,但实际上只返回 1 行。
我的查询是这样的。子查询返回 1,2 没有问题,但只检索到 1 行。
select *
from wt_lists
where id IN ((select replace (replace(sendto, ';;',','),';','')
from wt_stats where statsid IN (1)))
但是当我用这个尝试时。它返回正确的结果,在我的例子中是 2 行。
select *
from wt_lists
where id IN (1,2)
我在这里缺少什么?
最佳答案
需要在查询中显式定义逗号分隔字符串才能在 IN
子句中使用 - SO 上有无数示例,人们需要使用动态 SQL 来合并用户提交的逗号分隔字符串。
也就是说,我有一个使用 FIND_IN_SET function 的解决方案:
SELECT DISTINCT wl.*
FROM WT_LISTS wl
JOIN (SELECT REPLACE(REPLACE(ws.sendto, ';;',','),';','') AS ids
FROM WT_STATS ws
WHERE ws.statsid = 1) x ON FIND_IN_SET(wl.id, x.ids) > 0
关于MySQL 选择带有替换的子查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3123726/