2012-07-07 45 views
3

我想SQL查询其给出输出的concat串如何使用在节中的MySQL

SQL查询

SELECT GROUP_CONCAT(nm) FROM xyz WHERE xyz.id IN (REPLACE(abc,"|",',')) 

其中ABC是字符串等替换功能1 | 2 | 3 | 4这是XYZ表的IDS 上述查询只给出abc.I事情第一ID的纳米它创建像

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

查询,以便(“)可以创建亲任何人都可以帮忙。

+0

可能的[存储过程中的SQL IN子句]的副本(http://stackoverflow.com/questions/11354287/sql-in-clause-in-stored-procedure) – 2012-07-07 08:08:04

+0

@ChrisGessler - 这是标记为MySQL的问题你在SQL Server中链接。 – MatBailie 2012-07-07 08:26:10

+0

@Dems - 仍然与动态IN子句相关,并提到了几个解决方案,比如实现分割函数等等......同样的技巧可以很容易地应用到MySql – 2012-07-07 08:39:06

回答

3

您可以使用LIKE,(但当时其不打算使用指数法)

SELECT GROUP_CONCAT(nm) 
FROM xyz 
WHERE CONCAT('|', abc, '|') LIKE CONCAT('%|', xyz.id, '|%'); 
+0

MySQL是否有用户定义的表值函数?所以OP可以使用WHERE id IN((SELECT split(@list,','))'? – MatBailie 2012-07-07 08:24:20

2

您可以使用INSTR像这样:

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

或者你可以实现一个分裂的功能或使用动态SQL。

+0

instr和like之间有速度差异吗? – 2012-07-07 09:07:20

+0

@AndriyM我知道LIKE可以做更多的INSTR,但是如果你只需要INSTR的功能,我是否可以使用INSTR获得更快的查询,或者我可以继续使用LIKE作为im用于 – 2012-07-07 09:40:15

+0

@PugganSe:是的,这就是我错过了你的问题,这就是为什么我删除了我的评论。不会看到它,我错了。:)对不起,我的那件傻事。 – 2012-07-07 09:52:10