2013-03-13 3 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  | 
+---------+-------------------------+-------------------------+-------------+ 

, но мне нужно вывод, как этот

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

ответ

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; 
3

Данная проблема была решена уже!

Прямо из the documentation for GROUP_CONCAT:

Для устранения повторяющихся значений, используйте пункт DISTINCT.

Есть даже удобный пример его использования.

Пожалуйста, используйте документацию.

Смежные вопросы