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))
但这是多余的,不合逻辑的,没有意义。
我需要根据 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))
但这是多余的,不合逻辑的,没有意义。