GROUP_CONCAT 在 MySQL 中不使用 IN()

GROUP_CONCAT not working with IN() in MySQL

我需要根据 GROUP_CONCAT()[= 的值使用 IN() 语句 return 值37=]声明。

这个查询

SELECT GROUP_CONCAT(QUOTE(ID)) FROM primary_batch

理所应当 returns

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

但是这个查询

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

不return任何输出

但是,如果我放置实际值

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

我得到了我期望的输出。

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

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

不适合在子查询中使用 GROUP_CONCAT,因为您想要 return 单个 ID 值,而不是逗号分隔的字符串(请参阅 manual 讨论如何将 IN 与子查询一起使用)。这应该有效:

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

However if I place the actual values

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

I get the output I expect.

这是不对的。你的查询真的像

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))

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