2013-03-13 204 views
1
SELECT 
    A.id AS id, 
    Group_Concat(B.value) AS values, 
    Group_Concat(C.ac_id) AS ac_id, 
    Concat(D.first_name,' ',D.last_name) AS updatedBy 
FROM A 
LEFT JOIN B 
    ON A.id = B.id 
LEFT JOIN C 
    ON A.id = C.id 
LEFT JOIN D 
    ON A.modified_by = D.user_id 
WHERE 
    A.status!='deleted' 
    AND A.created_by = '18' 
GROUP BY A.id; 

表B & C具有多行corressponding到A.id這就是爲什麼我使用這些領域GROUP_CONCAT但我得到錯誤的結果對於那些已分組columns.query返回結果一樣查詢返回錯誤的結果

+---------+-------------------------+-------------------------+-------------+ 
| id  | values     | ac_id     | updatedBy | 
+---------+-------------------------+-------------------------+-------------+ 
|  8 | A,A,A,B,B,B,C,C,C,D,D,D | 1,5,6,1,5,6,1,5,6,1,5,6 | Abdul  | 
+---------+-------------------------+-------------------------+-------------+ 

,但我需要你的GROUP_CONCAT()這樣

+---------+-------------------------+-------------------------+-------------+ 
| id  | values     | ac_id     | updatedBy | 
+---------+-------------------------+-------------------------+-------------+ 
|  8 | A,B,C,D     | 1,5,6     | Abdul  | 
+---------+-------------------------+-------------------------+-------------+ 

回答

3

使用DISTINCT輸出。這種方式重複不顯示。

SELECT 
A.id AS id, 
Group_Concat(DISTINCT B.value) AS values, 
Group_Concat(DISTINCT C.ac_id) AS ac_id, 
Concat(D.first_name,' ',D.last_name) AS updatedBy 
FROM A 
LEFT JOIN B ON A.id = B.id 
LEFT JOIN C ON A.id = C.id 
LEFT JOIN D ON A.modified_by = D.user_id 
WHERE A.status!='deleted' AND A.created_by = '18' GROUP BY A.id; 
3

這個問題已經解決了!

直出the documentation for GROUP_CONCAT

消除重複值,使用DISTINCT條款。

甚至有一個它的使用方便的例子。

請使用文檔。