Как объединить данные из нескольких таблиц с помощью SQL? - PullRequest
1 голос
/ 09 ноября 2011

В моей базе данных 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
+----------------------------------------------+

Для связи Project и Technologies таблиц у меня есть следующая таблица:

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

Я хочу показать данные в одной таблице в виде строк и столбцов в пользовательском интерфейсе.Например:

+---------------------------------------------------+
  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

Я хотел бы знать, как избежать повторяющихся строк?В настоящее время этот запрос дает мне 2 строки, когда project_id = 1 и 4 строки, когда project_id = 2

Ответы [ 3 ]

2 голосов
/ 09 ноября 2011

Это должно сделать трюк ... 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

Исправлена ​​ошибка EDIT, включающая предложение JOIN

1 голос
/ 09 ноября 2011

ИСПОЛЬЗУЙТЕ ЭТО:

SELECT PROJECT.*, Technologies.* FROM Project_Technologies
INNER JOIN PROJECT ON Project_Technologies.Project_ID = PROJECT.project_id
INNER JOIN Technologies ON Project_Technologies.Technology_ID = Technologies.technology_id 
1 голос
/ 09 ноября 2011

Попробуйте это -

SELECT p.*, GROUP_CONCAT(t.technology_name) technologies FROM project p
  JOIN project_technologies pt
    ON pt.project_id = p.project_id
  JOIN technologies t
    ON t.technology_id = pt.technology_id
GROUP BY p.project_id;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...