Concat在mysql环境中不工作

Concat在mysql环境中不工作,mysql,concat,in-clause,Mysql,Concat,In Clause,请帮助我,我尝试获取类别列表,如下所示,其中类别ID在incluse中传递,它返回两行 mysql> select c_id,c_name from category where c_id in (870,854); +------+---------------+ | c_id | c_name | +------+---------------+ | 854 | Telugu | | 870 | Telugu Events | +------+-----

请帮助我,我尝试获取类别列表,如下所示,其中类别ID在incluse中传递,它返回两行

mysql> select c_id,c_name from category where c_id in (870,854);
+------+---------------+
| c_id | c_name        |
+------+---------------+
|  854 | Telugu        |
|  870 | Telugu Events |
+------+---------------+
mysql> select c_id,c_name from category where c_id in (select concat(870,',',854) as c_id);
+------+---------------+
| c_id | c_name        |
+------+---------------+
|  870 | Telugu Events |
+------+---------------+
而相同的类别id被连接并作为参数传递给Incluse,但它只返回一行而不是两行

mysql> select c_id,c_name from category where c_id in (870,854);
+------+---------------+
| c_id | c_name        |
+------+---------------+
|  854 | Telugu        |
|  870 | Telugu Events |
+------+---------------+
mysql> select c_id,c_name from category where c_id in (select concat(870,',',854) as c_id);
+------+---------------+
| c_id | c_name        |
+------+---------------+
|  870 | Telugu Events |
+------+---------------+
请澄清


谢谢。

不确定为什么要在
in子句中使用
concat
,当您有一些动态数据时,这是必需的,为此,您需要使用
prepare

这是怎么做的

set @c_id := concat(870,',',854);
set @qry = concat("select * from category where c_id in (",@c_id,")");

prepare stmt from @qry;
execute stmt;

我找到了解决方案

SELECT c_id, c_name 
FROM category 
WHERE FIND_IN_SET(c_id, (SELECT CONCAT(870,',',854) AS c_id))

谢谢。

Hi,实际上我修改了查询以便于理解,下面是精确的查询,其中类别id输入类似于“”-854-870-”,因此我使用字符串替换函数转换为854870以在mysql in子句中传递它,但它不会返回两个结果行。从c_id所在的类别中选择c_id、c_名称(选择替换(修剪('-'自'-854-870-')、'-'、'-'、'、'));您应该使用应用程序级别进行此类替换,然后将它们传递到查询中。您的建议是正确的,但我很想知道为什么这在查询中不起作用。当您在
in
子句中以字符串形式传递某个值时,它将被视为字符串,mysql将获得第一条记录的结果。这就是为什么您需要使用
concat
动态sql,就像我在答案中所显示的那样。因此,整个查询都在一个变量中,然后在该变量中执行查询。非常感谢您的宝贵建议:)粗略地说,CONCAT(或GROUP_CONCAT)是解决方案的SQL中没有问题。如果您发现自己在使用这些函数,则可能是做错了什么。