当前位置: 首页 > 面试题库 >

如何在MySQL中以多对多关系从逗号分隔列表中的一个字段连接数据?

苍元章
2023-03-14
问题内容

我和人与部门之间存在多对多关系,因为一个人可以在许多部门中工作。

People          Departments
------          -----------
pID  pName      deptID   deptName
1    James      1        Engineering
2    Mary       2        Research
3    Paul       3        Marketing
                4        Communications

People_Departments
------------------
pID   deptID
1     1
1     2
2     2
2     4
3     1
3     2
3     3

我想要的是:

pName  deptName
James  Engineering, Research
Mary   Research, Communication
Paul   Engineering, Research, Marketing

如果我使用下面的SQL在表上进行普通的LEFT JOIN连接,我将获得与一个人相关的几行:

SELECT people.pName,
       departments.deptName
FROM people
LEFT JOIN people_departments ON people.pID=people_departments.pID
LEFT JOIN departments ON people_departments.deptID=departments.deptID

我尝试过各种组合,GROUP_CONCAT但没有运气。

有什么想法要分享吗?


问题答案:
    SELECT people.pName,
           GROUP_CONCAT(departments.deptName SEPARATOR ', ') deptName
      FROM people
 LEFT JOIN people_departments 
        ON people.pID = people_departments.pID
 LEFT JOIN departments 
        ON people_departments.deptID = departments.deptID
  GROUP BY people.pID

输出:

+-------+----------------------------------+
| pName | deptName                         |
+-------+----------------------------------+
| James | Engineering, Research            |
| Mary  | Research, Communications         |
| Paul  | Engineering, Research, Marketing |
+-------+----------------------------------+
3 rows in set (0.00 sec)


 类似资料:
  • 问题内容: 我有两个表,和。 在表中我有一列。该列由电影适合的类别组成。这些类别是用逗号分隔的ID。 这是一个例子: 现在是一个实际的问题:是否可以执行一个查询,从电影表中排除类别列,而是从类别表中选择匹配的类别并以数组形式返回它们?像联接一样,但问题是存在多个用逗号分隔的类别,是否可以进行某种正则表达式? 问题答案: 在数据库字段中使用逗号分隔的列表是一种反模式,应不惜一切代价避免使用。 因为在

  • 问题内容: 我有看起来像这样的数据: 对于每个customer_id,我需要用逗号分隔的列表,以指示该客户运营的月份: 等等。如何使用SQL Server 2005 SQL(而不是T-SQL)轻松生成此逗号分隔的列表? 我在Stack Overflow和其他地方在这里看到的大多数解决方案似乎都是基于联接多个行值而不是列值来创建逗号分隔的列表: T-SQL FOR XML路径(’‘) 关联的子查询与

  • 问题内容: 我有一个未标准化的表,其中的列包含逗号分隔的列表,该列表是另一个表的外键: 我想将此数据读入不提供过程语言的搜索引擎中。 那么,有没有一种方法, 要么 就这一栏中加入 或 该数据运行查询插入相应的条目到一个新的表?结果数据应如下所示: 如果DBMS支持返回表的函数,但MySQL显然不支持,我可以想到一个解决方案。 问题答案: 在MySQL中,可以通过以下方式实现 现在要获取逗号分隔的v

  • 问题内容: 我有一个查询,在其中我联接了三个单独的表(节点,控件,服务)。 下面是它们的列标题和示例数据。 如您所见,除了 node.serviceID 列之外,数据库表还有一些标准化。我完全衷心同意应规范化 node.serviceID 并创建一对多的数据透视表。那里没有争论。但是,我不控制将信息插入数据库的脚本。我只能从表中读取数据并格式化数据。 因此,下面是我编写的有效的SQL查询,但按预期

  • 问题内容: 我有两个名为和的表。该表包含名为的列。 我需要从相应的表格中填充表格的列,以便表格中的每一行都有一个逗号分隔的列表,其中列出了学校名称的值。 我怎样才能做到这一点?我应该使用查询还是存储过程? 我只知道: SQL小提琴 输出需要如何 问题答案: 借助和 STUFF 来对值进行CONCATENATE,您可以轻松地用所需的结果更新表。 SQLFiddle演示

  • 我有一个关于Hibernate ManyToMany映射的问题。我有两个类 A 和 B,它们之间的映射是由 Hibernate 解析的 ManyToMany 映射: 用户和组的外键是“A_id”和“B_id”。联接表称为A_B。 现在,我想加上C。我想A_B与C有关系,与C创建多对多关系,A_B我可以称之为A_B_C。 编辑:所以我会创建一个_B实体,A和B和A_B的关系为2 @OneToMany