MYSQL,这种请求可能吗?

MYSQL,这种请求可能吗?,mysql,Mysql,我有一些人(表person)有0个或N个角色(表role和personne\u role)。 我想选择所有人,以及他们所扮演的角色,以获得这种结果: PHIL COLLINS | Drummer | Singer MIKE RUTHERFORD | Singer ION ANDERSON | Singer MIKE JAGGER | CARLOS SANTANA | Guitarist ...... 每行可以有0个或N个角色 为此,我提出了两个请求 第一个获得员工的人(表人) 第二个

我有一些人(表person)有0个或N个角色(表rolepersonne\u role)。 我想选择所有人,以及他们所扮演的角色,以获得这种结果:

PHIL COLLINS | Drummer | Singer

MIKE RUTHERFORD | Singer

ION ANDERSON | Singer

MIKE JAGGER |

CARLOS SANTANA | Guitarist
......
每行可以有0个或N个角色

为此,我提出了两个请求

  • 第一个获得员工的人(表

  • 第二个用于循环所有检索到的员工并检索他们的每个角色(表角色人员角色

它可以工作,但是如果有很多生产线,它的效率不是很高

我想在1个请求相同的结果

可能吗? 我必须使用哪些mysql关键字才能做到这一点

谢谢你的反馈。 dominique

您可以将a与a一起使用,例如:

SELECT person.name, role.roles
FROM person
LEFT JOIN (
  SELECT person_id, GROUP_CONCAT(DISTINCT role SEPARATOR ' | ') roles
  FROM person_role
  GROUP BY person_id
) role ON (person.id = role.person_id)
编辑:字段名称只是一个猜测,因为您没有向我们显示完整的表模式;此外,如果角色实际上在一个单独的故事中,比如说由一个
角色\u id
连接,则需要将其添加到子查询中。

您可以将a与a一起使用,类似于:

SELECT person.name, role.roles
FROM person
LEFT JOIN (
  SELECT person_id, GROUP_CONCAT(DISTINCT role SEPARATOR ' | ') roles
  FROM person_role
  GROUP BY person_id
) role ON (person.id = role.person_id)

编辑:字段名称只是一个猜测,因为您没有向我们显示完整的表模式;此外,如果角色实际上在一个单独的故事中,比如说由
角色id
连接,则需要将其添加到子查询中。

连接和分组方式、分组方式是您要查看的关键字。连接和分组方式、分组方式是您要查看的关键字。我不知道此分组方式说明。它很好用。谢谢!我不知道这个团体的指导。它很好用。谢谢!