Какой тип объединения мне нужно использовать в приведенном ниже SQL-запросе, чтобы получить правильные результаты? - PullRequest
0 голосов
/ 13 февраля 2019

Я хочу вернуть соответствующую информацию о пользователе из трех разных таблиц в моей базе данных, используя соединения SQL и функцию concat группы.Какие объединения подходят для того, чего я пытаюсь достичь?

У меня есть три таблицы, которые я хочу использовать в таблице: users user_events События

Текущий код SQL:

SELECT users.username, users.user_firstname, users.user_lastname,
       users.user_role, user_events.Event_ID
FROM users
LEFT JOIN user_events ON users.id = user_events.id

Возвращает всех пользователей, сведения о них и идентификатор события, на которое они подписаны, но этот идентификатор дублируется, если они зарегистрировались на одном или нескольких.

Если я обновлю свой запрос дониже, как мне присоединиться к таблице событий, чтобы получить имя события?

SELECT users.username, users.user_firstname, users.user_lastname,
       users.user_role,
       GROUP_CONCAT(Events.Event_Name) AS Event_Names
FROM users
LEFT JOIN user_events ON users.id = user_events.id

Мой вывод из первого запроса выглядит следующим образом:

| username    | user_firstname | user_lastname | user_role | event_id.           
| M@gmail.com | jo             | mccann        | employee  | 8                            
| M@gmail.com | jo             | mccann        | employee  | 15

Ожидаемый вывод:

| username    | user_firstname | user_lastname | user_role | Event_Name                              
| M@gmail.com | jo             | mccann        | employee  | baking,run

Ответы [ 2 ]

0 голосов
/ 13 февраля 2019
SELECT users.username, users.user_firstname, users.user_lastname,
       users.user_role,
       GROUP_CONCAT(ev.Event_Name) AS Event_Names
FROM users
LEFT JOIN user_events ON users.id = user_events.id
JOIN events ev ON ev.event_id = user_events.event_id
0 голосов
/ 13 февраля 2019

Просто добавьте еще один outer join и выполните агрегацию:

SELECT users.username, users.user_firstname, users.user_lastname,
       users.user_role,
       GROUP_CONCAT(Events.Event_Name) AS Event_Names,
       COUNT(Events.Event_Name) AS Event_count
FROM users LEFT JOIN 
     user_events 
     ON users.id = user_events.id LEFT JOIN
     Events 
     ON Events.id = user_events.event_id
GROUP BY users.username, users.user_firstname, users.user_lastname, users.user_role;

Используйте DISTINCT внутри COUNT() в случае дублирования событий.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...