MySQL:创建逗号分隔列表并在 IN 中使用

Posted

技术标签:

【中文标题】MySQL:创建逗号分隔列表并在 IN 中使用【英文标题】:MySQL: creating comma separated list and using in IN 【发布时间】:2015-02-26 09:58:35 【问题描述】:

我的功能代码如下。

DECLARE ids VARCHAR(55);
SELECT  GROUP_CONCAT(id) INTO ids 
        FROM tableName WHERE ...;
SELECT CONCAT(GROUP_CONCAT(id), ids ) INTO ids FROM tableName .....;
SELECT column_name FROM tableName WHERE id IN (**ids**);

在此我使用两个 select 语句创建 id 列表并应用到 IN 列表中。它给了我空结果。如果我 CAST 像 CONCAT(GROUP_CONCAT(id), CAST(ids as char) ) 这样的 ID,那么它会给我第一行结果。

【问题讨论】:

【参考方案1】:

试试这个:

DECLARE ids VARCHAR(55);
SELECT GROUP_CONCAT(id) INTO ids 
FROM (SELECT id 
      FROM tableName 
      WHERE...
      UNION 
      SELECT id 
      FROM tableName
      WHERE....
) AS A;

SELECT column_name FROM tableName WHERE FIND_IN_SET(id, ids);

【讨论】:

这是对的,但它不适用于临时表的情况。【参考方案2】:

我已经通过以下代码解决了问题

DECLARE ids VARCHAR(55);
SELECT GROUP_CONCAT(id SEPARATOR ',') INTO ids  FROM tableName WHERE ...;
SELECT CONCAT_WS(',', CAST(GROUP_CONCAT(id SEPARATOR ',')AS CHAR), CAST(ids AS CHAR)) INTO ids FROM tableName .....;
SELECT column_name FROM tableName WHERE FIND_IN_SET (id, ids );

【讨论】:

以上是关于MySQL:创建逗号分隔列表并在 IN 中使用的主要内容,如果未能解决你的问题,请参考以下文章

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

在主查询的“IN”子句中使用逗号分隔列表的子查询结果

在 Visual Studio 2008 中使用设计器将逗号分隔列表作为参数传递给 db2 查询的 IN 子句

如何在选择语句的“NOT IN”子句中使用逗号分隔的字符串列表作为 pl/sql 存储的函数参数

如何检查存储在varchar列中的逗号分隔列表中是否包含数字?

Mysql 使用逗号分隔列表 - 连接表