[英]SQL query not returning unique results. Which type of join do I need to use?
[英]What type of join do I need to use in the below sql query to retrieve the correct results?
我想使用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
這將返回所有用戶,那里的詳細信息以及他們已注冊的事件的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
只需再添加一個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;
如果發生重復事件,請在COUNT()
中使用DISTINCT
。
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
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.