如何在mysql中使用带in子句的replace函数

如何在mysql中使用带in子句的replace函数,mysql,sql,Mysql,Sql,我想要sql查询,它以concat字符串的形式给出输出 Sql查询 SELECT GROUP_CONCAT(nm) FROM xyz WHERE xyz.id IN (REPLACE(abc,"|",',')) 其中abc是类似于1 | 2 | 3 | 4的字符串,它是xyz表的ID 上面的查询只给出abc中第一个id的nm。我想它创建的查询是这样的 SELECT GROUP_CONCAT(nm) FROM xyz WHERE xyz.id IN ("1,2,3,4") 所以(“)可能会产生

我想要sql查询,它以concat字符串的形式给出输出

Sql查询

SELECT GROUP_CONCAT(nm) FROM xyz WHERE xyz.id IN (REPLACE(abc,"|",','))
其中abc是类似于1 | 2 | 3 | 4的字符串,它是xyz表的ID 上面的查询只给出abc中第一个id的nm。我想它创建的查询是这样的

SELECT GROUP_CONCAT(nm) FROM xyz WHERE xyz.id IN ("1,2,3,4")

所以(“)可能会产生任何人都可以帮助的问题。

您可以像使用
一样使用
,(但它不会使用索引)


您可以像这样使用
INSTR

SELECT GROUP_CONCAT(nm) 
FROM xyz 
WHERE INSTR(CONCAT('|', abc, '|'), CONCAT('|', xyz.id, '|')) > 0

或者您可以实现拆分函数或使用动态SQL。

可能重复@ChrisGessler-这是标记为MySQL的问题,您在SQL Server中链接的问题。@Dems-仍然与动态in子句相关,并提到了几种解决方案,如实现拆分函数等。同样的技术可以轻松应用于MySQL是否有用户定义了表值函数?因此OP可以使用
中的WHERE id((选择split(@list,
))
?instr和like之间是否存在速度差异?@AndriyM我知道like可以比instr做得更多,但如果您只需要instr的功能,我是否可以使用instr进行更快的查询,或者我是否可以继续使用like作为我使用的工具to@PugganSe:是的,这就是我在你的问题中遗漏的内容,也是我删除我的评论的原因。我希望你不会看到它,并且我错了。:)为我的愚蠢感到抱歉。
SELECT GROUP_CONCAT(nm) 
FROM xyz 
WHERE INSTR(CONCAT('|', abc, '|'), CONCAT('|', xyz.id, '|')) > 0