mysql - 如何使用 SQL 合并来自多个表的数据?

标签 mysql sql join

我的 MySql 数据库中有以下表格:

+----------------------------------------------+
                      PROJECT
+----------------------------------------------|
+----------------------------------------------|
  project_id | team_size | from_date
+----------------------------------------------|
    1        |   34      |  1 Dec 2010
+----------------------------------------------|
    2        | 2         | 2 Jan 1902
+----------------------------------------------|
    3        | 99        | 15 Aug 1947
+----------------------------------------------+

+----------------------------------------------+
        Technologies
+----------------------------------------------+
+----------------------------------------------+
 technology_id | technology_name
+----------------------------------------------+
       1       | Java
+----------------------------------------------+
       2       | CPP
+----------------------------------------------+
       3       | Hibernate
+----------------------------------------------+
       4       | EJB
+----------------------------------------------+
       5       | Python
+----------------------------------------------+
       6       | Hadoop
+----------------------------------------------+
       7424    | Perl
+----------------------------------------------+

要链接 ProjectTechnologies 表,我有下表:

+----------------------------------------------+
        Project_Technologies
+----------------------------------------------+
+----------------------------------------------+
   Project_ID   | Technology_ID
+----------------------------------------------+
    1           | 2
+----------------------------------------------+
    1           | 7424
+----------------------------------------------+
    2           | 1
+----------------------------------------------+
    2           | 3
+----------------------------------------------+
    2           | 4
+----------------------------------------------+
    2           | 5
+----------------------------------------------+

我想在 UI 中以行和列的形式显示一个表中的数据。 例如:

+---------------------------------------------------+
  project_id | team_size | from_date | technologies 
|---------------------------------------------------|
|     1      |   34      | 1 Dec 2010| CPP, Perl    |
|---------------------------------------------------|
|     2      |   2       | 2 Jan 1902| Java, Hibernate, EJB, Python |
|---------------------------------------------------|
|     3      |   99      |15 Aug 1947|              |
+---------------------------------------------------+

我无法形成 sql 查询来得到这样的东西。我尝试了以下查询,它给了我重复的行。

select pr.project_id,pr.team_size,pr.from_date,tech.technology_name
from project pr, project_technologies ptech, technologies tl
where pr.project_id=ptech.project_id and ptech.technology_id=tl.technology_id

我想知道如何避免重复行?目前这个查询在 project_id=1 时给了我 2 行,在 project_id=2 时给了我 4 行

最佳答案

这应该可以解决问题......一个 group by 和一个 group_concat

select 
    pr.project_id, 
    pr.team_size, 
    pr.from_date, 
    GROUP_CONCAT(tech.technology_name separator ', ') as technologies
from  
    project pr 
    JOIN project_technologies ptech ON pr.project_id=ptech.project_id
    JOIN technologies tl ON ptech.technology_id=tl.technology_id
GROUP BY
    pr.project_id, 
    pr.team_size, 
    pr.from_date

编辑已修复以包含 JOIN 子句

关于mysql - 如何使用 SQL 合并来自多个表的数据?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8061514/

相关文章:

mysql - 如何使用或使用多列为 mysql 查询建立索引

mysql - 我可以在MYSQL中连接两个表并创建一个新表吗

sql - INNER JOIN 子句在 NATURAL JOIN 执行时不返回任何行

mysql - 使用 SELECT 命令加入

sql - 选择自己的阵列。 PostgreSQL 9.5

php - 找不到检查用户是否已存在的方法

mysql - 获取日期之间的总平均值

php - 从Mysql表中获取分类和子分类

MySQL SELECT 1 Parent 许多子值

mysql - Ruby on Rails 3 个模型之间的关系