在 IN 子句 Mysql 中使用 GROUP_CONCAT 结果

Posted

技术标签:

【中文标题】在 IN 子句 Mysql 中使用 GROUP_CONCAT 结果【英文标题】:Use GROUP_CONCAT result in IN Clause Mysql 【发布时间】:2013-11-28 19:24:58 【问题描述】:

我有一个返回逗号分隔整数的查询 喜欢:

select GROUP_CONCAT(ids) from table2

现在我想在另一个查询中使用该结果 喜欢:

select * from table1 where column in (select GROUP_CONCAT(ids) from table2)

在这种情况下,它将只考虑 IN 子句中的第一个值。

【问题讨论】:

【参考方案1】:

没有使用连接和使用子查询的任何特殊原因

select * from table1 t1
JOIN table2 t2 on (t2.column = t1.ids)

【讨论】:

【参考方案2】:

我同意@Alma 的观点,即使用 IN 无法做到这一点,您可以使用 FIND_IN_SET 做到这一点,但如果您可以使用 IN 做到这一点,那可能是更好的方法:

SELECT *
FROM table1
WHERE find_in_set(ids, (
      SELECT GROUP_CONCAT(ids)
      FROM table2
      )) != 0;

sqlfiddle demo

【讨论】:

当您可以直接使用 IN() 时,这不是一个好的解决方案,GROUP_CONCAT 是不可取的,因为它有一个字符限制,如果您在答案中使用,您需要增加该限制,您需要简要说明另外,当它可以以简单的方式完成时,为什么先设置然后应用find_in_set 才有意义? 我并不是说这是一个好方法。我建议改用 IN,但我认为这是他所要求的。 有没有其他方法可以在 where 子句中用于 group_concat() 值而不是 find_in_set

以上是关于在 IN 子句 Mysql 中使用 GROUP_CONCAT 结果的主要内容,如果未能解决你的问题,请参考以下文章

mysql子查询在where in子句中

在 IN 子句 Mysql 中使用 GROUP_CONCAT 结果

Mysql使用IN搜索包含每个IN子句单词的条目

在MySQL存储过程中的WHERE子句中使用IN param

MySQL“IN”子句中的逗号分隔值

MySQL 不使用带有 WHERE IN 子句的索引?