GROUP_CONCAT无法在MySQL中与IN()一起使用

问题描述 投票:0回答:2

我需要基于GROUP_CONCAT()语句的值,使用IN()语句返回值。

此查询

SELECT GROUP_CONCAT(QUOTE(ID)) FROM primary_batch

正确返回

'4','2','6','3','5','1'

但是此查询

SELECT * FROM secondary_batch WHERE id IN (SELECT GROUP_CONCAT(QUOTE(ID)) FROM primary_batch)

不返回任何输出

但是,如果我放置实际值

SELECT * FROM secondary_batch WHERE id IN ('4','2','6','3','5','1')

我得到了我期望的输出。

我不知道为什么会这样。我正在使用MySQL v5.7。

如果确实存在以这种方式使用GROUP_CONCAT / IN语句的限制,我愿意使用基于存储过程的其他解决方案来达到此结果。

mysql stored-procedures group-concat
2个回答
1
投票

在子查询中不宜使用GROUP_CONCAT,因为您要返回单个ID值,而不是用逗号分隔的字符串(请参阅manual,以获取有关如何将IN与子查询一起使用的讨论。 )。这应该工作:

SELECT * 
FROM secondary_batch
WHERE id IN (SELECT ID FROM primary_batch)

0
投票

但是,如果我放置实际值

SELECT * FROM secondary_batch WHERE id IN ('4','2','6','3','5','1')

我得到了我期望的输出。

这是不对的。确实您的查询看起来像

SELECT * FROM secondary_batch WHERE id IN ('\'4\',\'2\',\'6\',\'3\',\'5\',\'1\'')

即不是列表,而是一个字符串文字的值。

如果您肯定要在子查询中使用GROUP_CONCAT(),则必须使用

SELECT * 
FROM secondary_batch 
WHERE FIND_IN_SET(id, (SELECT GROUP_CONCAT(QUOTE(ID)) FROM primary_batch))

但是这是多余的,不合逻辑的,没有任何意义。

© www.soinside.com 2019 - 2024. All rights reserved.