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 には A.id に対応する複数の行があります。そのため、これらのフィールドで group_concat を使用していますが、これらのグループ化された列に対して間違った結果が得られます。クエリは次のような結果を返します

+---------+-------------------------+-------------------------+-------------+
| 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       |
+---------+-------------------------+-------------------------+-------------+

しかし、私はこのような出力が必要です

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

2 に答える 2

3

で使用DISTINCTしますGROUP_CONCAT()。このようにして、重複は表示されません。

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;
于 2013-03-13T09:59:41.760 に答える
3

この問題はすでに解決されています!

のドキュメントGROUP_CONCATからまっすぐ:

重複する値を排除するには、DISTINCT句を使用します。

その使用の便利な例さえあります。

ドキュメントを使用してください。

于 2013-03-13T10:00:54.573 に答える