Mysql 如何进行此查询-GROUP_CONCAT

Mysql 如何进行此查询-GROUP_CONCAT,mysql,sql,select,group-concat,Mysql,Sql,Select,Group Concat,我想在表a上执行选择,该表有: table_a: ╔══════════╦════════╗ ║ GROUP_ID ║ NAME ║ ╠══════════╬════════╣ ║ 1 ║ Tom ║ ║ 2 ║ Frank ║ ║ 3 ║ Shilla ║ ║ 1 ║ Scully ║ ║ 1 ║ Jen ║ ╚══════════╩════════╝ table_b: ╔════╦════════

我想在
表a上执行
选择
,该表有:

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 ║
╚════════════╩════════════════╝
╔════════════╦════════════════╗
║ GROUP_NAME ║    MEMBERS     ║
╠════════════╬════════════════╣
║ Troopers   ║ Tom,Scully,Jen ║
╚════════════╩════════════════╝

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

我认为您的WHERE条件太有限了

WHERE table\u b.GROUP\u 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'

我认为你的条件太严格了

WHERE table\u b.GROUP\u 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'
为了获得更好的性能,请为
表\u b.组\u名称
添加
唯一的
约束

结果

为了获得更好的性能,请为
表\u b.组\u名称
添加
唯一的
约束

结果


我需要找到给定成员的组我需要找到给定成员的组你的结果仅限于Scully。也许你只是想限制史高丽的团体ID?你把结果限制在史高丽身上了。也许你只是想限制史高丽的团体身份?
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