簡體   English   中英

我需要在以下sql查詢中使用哪種類型的聯接才能檢索正確的結果?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM