2016-04-19 15 views
0

私は3つのテーブルを持っています: テーブル 'A'にはそれぞれユニークなIDを持つ多数のイベントがあります。 テーブル 'B'にはテーブルAのIDと一致するカテゴリがありますが、各IDには複数の一致がある可能性があります。 テーブル 'C'は、テーブル 'B'のIDと一致するカテゴリ名を定義します。 カテゴリごとに繰り返される各イベントではなく、複数のカテゴリがまとめてリストされた一意のイベントを示す出力を得るにはどうすればよいですか?Mysqlは2つのテーブルの共通フィールドの一致する行を見つけ、フィールドを1つの行に結合します

 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 slowで泳ぐ」の代わりに「1-2-16 slow、med、fastで泳ぐ」、「1-2-16 medで泳ぐ」、「1-2-16 fastで泳ぐ」などです。どうすればこれを達成できますか?

答えて

0

あなたは、私はまた、選択部分に同等MAX(A.id)を追加しなければならなかった私の実際のアプリケーションでは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

を使用する必要があります。 – user3520372

関連する問題