【问题标题】:How to do this query - GROUP_CONCAT如何执行此查询 - GROUP_CONCAT
【发布时间】:2013-01-04 01:30:43
【问题描述】:

我想在table A 上做一个SELECT,它有:

table_a:

╔══════════╦════════╗
║ GROUP_ID ║  NAME  ║
╠══════════╬════════╣
║        1 ║ Tom    ║
║        2 ║ Frank  ║
║        3 ║ Shilla ║
║        1 ║ Scully ║
║        1 ║ Jen    ║
╚══════════╩════════╝


table_b:

╔════╦════════════╗
║ ID ║ GROUP_NAME ║
╠════╬════════════╣
║  1 ║ Troopers   ║
║  2 ║ Clubs      ║
║  3 ║ Mavericks  ║
╚════╩════════════╝

现在,我想显示给定成员名称的组:

SELECT GROUP_NAME,GROUP_CONCAT(table_a.NAME) MEMBERS     
FROM table_a     
JOIN  table_b ON table_a.GROUP_ID = table_b.ID   
WHERE
table_a.NAME = 'Scully'

我想要这个:

╔════════════╦════════════════╗
║ GROUP_NAME ║    MEMBERS     ║
╠════════════╬════════════════╣
║ Troopers   ║ Tom,Scully,Jen ║
╚════════════╩════════════════╝

为什么这个查询不起作用?

【问题讨论】:

  • 您将结果限制为 JUST Scully。也许你只是想通过 SCULLY 的组 ID 来限制?

标签: mysql sql select group-concat


【解决方案1】:
SELECT  b.GROUP_NAME, GROUP_CONCAT(c.Name) Members
FROM    
        (
            SELECT GROUP_ID
            FROM   table_a
            WHERE  name = 'Scully'
        ) a 
        INNER JOIN table_b b
            ON a.GROUP_ID = b.ID
        INNER JOIN table_a c
            ON a.GROUP_ID = c.GROUP_ID
GROUP   BY b.GROUP_NAME

为了获得更好的性能,为table_b.GROUP_Name 添加一个UNIQUE 约束。

结果

╔════════════╦════════════════╗
║ GROUP_NAME ║    MEMBERS     ║
╠════════════╬════════════════╣
║ Troopers   ║ Tom,Scully,Jen ║
╚════════════╩════════════════╝

【讨论】:

    【解决方案2】:

    我认为你的 WHERE 条件太受限制了。

    WHERE table_b.GROUP_NAME = 'Troopers'

    如果你只有一个成员的名字,那么你需要使用另一个加入来获取组 ID:

    试试这个:

    SELECT table_b.GROUP_NAME, GROUP_CONCAT(table_a.NAME) MEMBERS     
    FROM table_a     
    JOIN  table_b ON table_a.GROUP_ID = table_b.ID   
    JOIN  table_b `temp` ON table_a.GROUP_ID = temp.ID   
    WHERE temp.NAME = 'Scully'
    

    【讨论】:

    • 我需要找到给定成员的群组
    【解决方案3】:
    SELECT
        `group_name`,
        GROUP_CONCAT(a.`name`) AS 'members'
    FROM `table_a` a
    INNER JOIN `table_b` b
    ON a.`group_id` = b.`id`
    AND a.`group_id` = (
        SELECT `group_id` FROM `table_a` WHERE `name`='Scully'
    )
    GROUP BY NULL
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-07-04
      • 2011-07-26
      • 1970-01-01
      • 1970-01-01
      • 2023-03-19
      • 2021-02-15
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多