我想使用SQL连接和组concat函数从数据库的三个不同表中返回有关用户的适当信息。哪些连接适合我要实现的目标?
我要在表中使用三个表: 使用者 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
这将返回所有用户,那里的详细信息以及他们已注册的事件的ID,但是如果他们已注册一个或多个,则此事件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
答案 0 :(得分:0)
只需再添加一个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()
。
答案 1 :(得分:0)
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