Группа MySQL concat используется с двумя дубликатами результатов запроса таблицы соединений

Я присоединился к 2 таблицам и использую группу concat для получения данных по некоторым столбцам. ниже мой запрос. это возвращает одну и ту же строку дважды

SELECT GROUP_CONCAT(  vehicles.role ORDER BY vehicles.id ASC SEPARATOR '\n') as role,GROUP_CONCAT(  vehicles.size ORDER BY vehicles.id ASC SEPARATOR '\n') as size,festivals.id,festivals.ref_no as ref_no, festivals.camping,festivals.tour_mgr_name,festivals.email,festivals.mobile,festivals.name_address, GROUP_CONCAT( namedesgs.name  ORDER BY namedesgs.id ASC SEPARATOR '\n') as names,GROUP_CONCAT( namedesgs.designation  ORDER BY namedesgs.id ASC SEPARATOR '\n') as designations
FROM festivals
    LEFT JOIN namedesgs  ON festivals.id = namedesgs.festival
    LEFT JOIN vehicles  ON festivals.id = vehicles.festival 
Group BY festivals.id

пожалуйста, посоветуйте, как получить данные без дубликатов?

когда я использовал DISTINCT с concat . ниже не работает

ex:

данные nameesg

введите здесь описание изображения

данные транспортных средств

введите здесь описание изображения

выходной ток

но на моих выходных veicles данные дублируются 3 раза, хотя существуют одни данные.

вот запрос, который я пробовал

SELECT t.id, GROUP_CONCAT(a.name SEPARATOR '\n') as name,
 GROUP_CONCAT(a.designation SEPARATOR '\n') as desg ,GROUP_CONCAT(b.role SEPARATOR '\n') as role,
 GROUP_CONCAT(b.size SEPARATOR '\n') as size
FROM festivals t
 LEFT JOIN namedesgs a ON a.festival=t.id 
 LEFT JOIN vehicles b ON b.festival=t.id  
where t.id=4
GROUP BY t.id


festivals

id ref_no
1   AAA
2   BBB
3   CCC

namedesgs  

id name designation festival(festival table id)
1  ann   SE              1
2  ben   AE              1
3  Jan   cook            1
4  alun  cook            1
5  hej    hik            2
6  nij    AE             1

vehicles

id role size   festival(festival table id)
1  r1   14              1
2  r1   12              1
3  r2   12              1
4  r3  12              1
5  r4    12            2

то, что я хочу, как результат

festivalid name designations role  size
1           ann    SE          r1  14
            ben    AE          r1  12
           jan    cook         r2  12
           alun    cook        r3  12
           aij    AE          
2          hej    hik         r4   12

person hansi silva    schedule 19.04.2017    source источник
comment
Используйте DISTINCT в GROUP_CONCAT для удаления дубликатов.   -  person Barmar    schedule 19.04.2017
comment
@Barmar: я тоже использовал его GROUP_CONCAT( DISTINCT cars.size ORDER BY Vehicles.id ASC SEPARATOR '\n', но когда данные дублируются, он также удаляет это. См. Прикрепленное изображение моей таблицы. Когда я использовал DISTINCT, он вернется только на «desg6» даже думал, что в таблице их два. Пожалуйста, посоветуйте   -  person hansi silva    schedule 19.04.2017
comment
@Barmar: пожалуйста, проверьте обновленную часть моего вопроса.   -  person hansi silva    schedule 19.04.2017
comment
Можете ли вы показать образцы данных и желаемый результат?   -  person Barmar    schedule 19.04.2017
comment
@Barmar, пожалуйста, проверьте мой вопрос, я добавил информацию. пожалуйста, помогите   -  person hansi silva    schedule 20.04.2017
comment
Какой результат вы пытаетесь получить вместо этого? Кроме того, было бы лучше, если бы вы разместили данные в виде обычного текста, чтобы мы могли копировать и вставлять их при тестировании.   -  person Barmar    schedule 20.04.2017
comment
@Barmar, пожалуйста, проверьте сейчас. я добавил обычным текстом   -  person hansi silva    schedule 20.04.2017
comment
Я не понимаю ваших желаемых результатов. Почему ben AE находится в той же строке, что и r1 12, а не r1 14 или r2 12?   -  person Barmar    schedule 20.04.2017
comment
@Barmar: потому что я хочу показать все имена-обозначения и размеры-роли для определенного идентификатора фестиваля в одной строке. вот почему я использовал группу concat . но с присоединяется к своим дублирующим данным   -  person hansi silva    schedule 20.04.2017


Ответы (1)


Для того, что вы хотите, вы не можете поместить name и designation, а также role и size в отдельные столбцы результатов. Вам нужно объединить их перед использованием GROUP_CONCAT. И используйте DISTINCT для удаления дубликатов.

SELECT t.id AS festivalid, 
        GROUP_CONCAT(DISTINCT CONCAT(a.name, ' ', a.designation) SEPARATOR '\n') AS `name designations`,
        GROUP_CONCAT(DISTINCT CONCAT(b.role, ' ', b.size) SEPARATOR '\n') AS `role size`
FROM festivals AS t
LEFT JOIN namedesgs a ON a.festival=t.id 
LEFT JOIN vehicles b ON b.festival=t.id
GROUP BY t.id
person Barmar    schedule 20.04.2017
comment
еще дублирую. то же, что и мое изображение «текущий вывод» - person hansi silva; 20.04.2017
comment
Смотрите мой вопрос выше. Я не понимаю, как вы связываете строки из таблиц namedesgs и vehicles, чтобы получить их в одной строке результатов. - person Barmar; 20.04.2017