2013-08-19 26 views
0

我有一個類似於Getting data from multiple tables into single row while concatenating some values的問題,但我無法理解它,而我是新手是sql查詢。我有很少的表,我必須加入他們,並連續獲得一些連接的數據。說明是如下:Group Concat在多列上應用時返回重複條目

 
Table 1 - tasks(id,title,user_id) 
id  title   user_id  tree_id 
--  -----   -------  ------- 
1  test task   1   20 

Table 2 - task_follower(id,user_id,task_id) 
id  user_id task_id 
--  ------- ------- 
1  1   1 

Table 3 - account_user(id,name,email) 
id  name email 
--  ---- ----- 
1  rakesh [email protected] 

Table 2 - category(id,category) 
id  category 
--  ------- 
1  Project1 

Table 2 - task_category(id,user_id,task_id) 
id  task_id category_id 
--  ------- ------- 
1  1   1 

而且我運行的查詢是:

 
    SELECT a.*, GROUP_CONCAT(b.name SEPARATOR ',') AS member_names, GROUP_CONCAT(b.email SEPARATOR ',') AS member_emails, GROUP_CONCAT(DISTINCT d.category) SEPARATOR ',') AS categories FROM tasks AS a INNER JOIN task_followers AS c ON a.id = c.task_id INNER JOIN account_user AS b ON c.user_id = b.id INNER JOIN task_category AS i ON a.id = i.task_id INNER JOIN category AS d ON i.category_id = d.id WHERE a.id = 1 AND a.user_id = 1 AND GROUP BY a.id 

由於此查詢的結果我得到:

 
id title  user_id tree_id  member_names member_emails 
--- -----  ------- -------  ------------- ------------- 
1  test task  1  20  rakesh,rakesh [email protected],[email protected] 

我無法理解爲什麼名字和電子郵件是重複的?請幫我解決這個問題,如果你能解釋我在概念上哪裏出錯了?

我注意到,當與任務相關聯的類別數量超過一個時,就會發生此問題。請看看http://sqlfiddle.com/#!2/b96eb/1 我在那裏創建了一個示例來演示我的問題。

回答

1

您可以刪除使用DISTINCT

GROUP_CONCAT(DISTINCT b.name SEPARATOR ',') 

的原因有重複值的重複是因爲它發生的從一個表中的記錄一個上有多個匹配另一張桌子。 see here.

+0

我明白了你的意思,但是在這裏有一個問題..可以說如果兩個用戶具有相同的名稱,那麼它將不會顯示這兩個用戶..我編輯了示例[See Here](http:// sqlfiddle。 com /#!2/b75d3/1) –

+0

長話短說,你能根據你的記錄顯示你想要的結果嗎? –

+0

除了這些重複的名稱和電子郵件之外,基本上結果與小提琴輸出相同...我想要所有任務,關聯的關注者(以逗號分隔)和類別(以逗號分隔)... –