我需要基于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语句的限制,我愿意使用基于存储过程的其他解决方案来达到此结果。
在子查询中不宜使用GROUP_CONCAT
,因为您要返回单个ID
值,而不是用逗号分隔的字符串(请参阅manual,以获取有关如何将IN
与子查询一起使用的讨论。 )。这应该工作:
SELECT *
FROM secondary_batch
WHERE id IN (SELECT ID FROM primary_batch)
但是,如果我放置实际值
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))
但是这是多余的,不合逻辑的,没有任何意义。