2016-04-19 5 views
0

У меня есть три таблицы: Таблица «A» содержит несколько событий с уникальным идентификатором. Таблица «B» имеет категории, которые соответствуют идентификатору таблицы A, хотя может быть несколько совпадений для каждого идентификатора. Таблица 'C' определяет имена категорий, которые соответствуют идентификатору в таблице 'B'. Как я могу получить вывод, который показывает уникальные события с несколькими категориями, перечисленными вместе, в отличие от каждого события, повторяемого для каждой категории?Mysql найти совпадающие строки для общего поля в двух таблицах и объединить поля в одну строку

 Table A     Table B    Table C 
id | event | date |   id | catid    catid | cat 
1  swim 1-2-16   1  11    11 slow 
2  swim 1-2-16   1  12    12 med 
3  run 1-3-16   1  13    13 fast 
4  bike 1-5-16   2  11 
5  run 1-30-16   3  12 
           3  13 
           4  12 
           5  11 

У меня это заявление Mysql:

SELECT A.*, B.*, C.* 
     FROM A, B, C 
     WHERE A.id = B.id and B.catid = C.catid and DATE(date) BETWEEN "1-2-16" and "1-5-16 
ORDER BY event, cat 

Проблема вывода этого утверждения повторяет событие для каждой категории. Я хотел бы, чтобы на выходе отображались все категории, применимые для каждого события, как выходная строка. Например, «плавайте по 1-2-16 медленно, меди, быстро», а не «плавайте на 1-2-16 медленных», «плавайте по 1-2-16 мед», «плавайте 1-2-16 быстро». Как я могу это сделать?

ответ

0

Вы должны использовать GROUP_CONCAT

select A.event, A,date, group_concat(C.cat) 
from A 
inner join b on a.id = b.id 
inner join b.catid = c.catid 
group by b.id; 
+0

В моем реальном приложении я должен был тоже добавить эквивалентный MAX (A.id) в Select части. – user3520372