Я работаю с базой данных mysql, но перед вами стоит проблема. У меня есть список пользователей, который выглядит примерно так.Объединение столбцов в отдельные столбцы с мостом
Users
+----+------+
| ID | Name |
+----+------+
| 1 | Jim |
| 2 | Cal |
| 3 | Rob |
| 4 | John |
| 5 | Paul |
+----+------+
Теперь у меня есть еще две таблицы,
Teams Role
+----+----------+ +---+------+
| ID | NameTeam | |ID | Role |
+----+----------+ +---+------+
| 1 | Team1 | | 1 |Leader|
| 2 | Team2 | | 2 |Member|
| 3 | Team3 | | 3 |Role3 |
| 4 | Team4 | | 4 |Role4 |
| 5 | Team5 | | 5 |Role5 |
+----+----------+ +---+------+
Пожалуйста, не то, что все идентификаторы являются первичными ключами.
Наконец, есть таблица, которая служит мостом для таблиц выше.
Bridge
+---------+--------+--------+
| ID_team | ID_user| ID_role|
+---------+--------+--------+
| 1 | 1 | 1 |
| 1 | 2 | 2 |
| 1 | 3 | 3 |
| 2 | 4 | 1 |
| 2 | 5 | 2 |
| 2 | 1 | 3 |
+---------+--------+--------+
Все эти три столбца являются внешними ключами, которые связаны с первичными ключами в трех таблицах «Пользователи, команды и роль».
Что мне нужно - это список всех пользователей и в одном столбце информации о командах, в которых они входят, а также о роли, которую они играют в этой команде. Я решил, что смогу сделать это с помощью левого соединения, но для пользователя может быть связано несколько команд, а затем строка будет дублироваться.
Мой запрос до сих пор:
select * from Users
LEFT OUTER JOIN Bridge
ON Bridge.UserID = Users.UserID;
Какие результаты в дубликатах, как:
Result
+----+------+---------+--------+--------+
| ID | Name | ID_team | ID_user| ID_role|
+----+------+---------+--------+--------+
| 1 | Jim | 1 | 1 | 1 | << Twice Jim here
| 1 | Jim | 2 | 1 | 3 | <<
| 2 | Cal | 1 | 2 | 2 |
| 3 | Rob | 1 | 3 | 3 |
| 4 | John | 2 | 4 | 1 |
| 5 | Paul | 2 | 5 | 2 |
+----+------+---------+--------+--------+
Desired result
+----+------+----------------------------+
| ID | Name | Team and role |
+----+------+----------------------------+
| 1 | Jim | Team1: Leader,Team2:role3 | <<Nice sum up.
| 2 | Cal | Team1: Member |
| 3 | Rob | Team1: Role3 |
| 4 | John | Team2: Leader |
| 5 | Paul | Team2: Member |
+----+------+----------------------------+
ли что-то подобное возможно даже с помощью одного запроса? Если бы не я, я мог бы всегда создавать что-то подобное, используя php, но было бы очень приятно, если бы это был единственный запрос.
Так что мой вопрос в том, как я могу получить желаемый результат?
Несомненно, вам необходимо, чтобы стол бриста разбивался на 2 таблицы моста 1) Пользователь находится в команде и 2) Пользователь имеет роль – RiggsFolly