我需要在以下sql查询中使用哪种类型的联接才能检索正确的结果?

时间:2019-02-13 15:13:54

标签: mysql sql

我想使用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

2 个答案:

答案 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
相关问题