在 JOIN 查询中使用 Mysql GROUP_CONCAT

Posted

技术标签:

【中文标题】在 JOIN 查询中使用 Mysql GROUP_CONCAT【英文标题】:Using Mysql GROUP_CONCAT in JOIN Query 【发布时间】:2018-05-12 18:42:23 【问题描述】:

我有一个这样的字符串:

'41,42,43,44,45,46,'

来自这个查询:

SELECT 
    GROUP_CONCAT(lv
        SEPARATOR ',') as Id
FROM
    (SELECT 
        @pv:=(SELECT 
                    GROUP_CONCAT(Id
                            SEPARATOR ',')
                FROM
                    iot_zone
                WHERE
                    FIND_IN_SET(id_zone, @pv)) AS lv
    FROM
        iot_zone
    JOIN (SELECT @pv:=40) tmp) a;

我需要将此结果加入到如下查询中:

SELECT T.* FROM T, T2
WHERE T.Id = T2.Id

其中 T2 是具有 GROUP_CONCAT 结果的表

41
42
43
44
45
46

你能帮帮我吗?

非常感谢

【问题讨论】:

【参考方案1】:

试试下面的

CREATE TABLE T2(Id int);
INSERT T2(Id)VALUES(41),(42),(43);

SELECT *
FROM
  (
    SELECT '41,42,43,44,45,46,' Id
  ) T
JOIN T2 on CONCAT(',',T.Id) LIKE CONCAT('%,',T2.Id,',%')

希望我正确理解了您的问题。

我发现了另一个变体 FIND_IN_SET - SELECT WHERE IN with GROUP_CONCAT as input

我认为它会更有用

SELECT *
FROM
  (
    SELECT '41,42,43,44,45,46,' IdList
  ) T
JOIN T2 ON FIND_IN_SET(T2.Id,T.IdList)

【讨论】:

我发现了另一个非常好的 mysql 变体 FIND_IN_SET。我也将它添加到我的答案中。

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

具有 JOIN 和 GROUP BY 优化的 MySQL 查询。是不是可以?

Mysql Group Join 优化问题

使用 LEFT JOIN 的 MySQL 视图中的问题... GROUP BY

MySQL 使用 JOIN 和 GROUP_CONCAT

如何在 JOIN MySQL 中进行 GROUP BY 和 COUNT(*)

在 php codeigniter 中使用 join/concat 的 mysql 查询结果