2011-02-10 14 views
1

特定の出力を生成するためにgroup_concatを使用する方法を理解するのに苦労します。 2つのテーブル::group_concat質問(mysql)

第一は、クライアントが含まの情報を、動物含ま

第二 各クライアントの情報をここで

は私が持っているものです。

私はこの出力を生成する必要があります(私は境界線を省略しますが、基本的にこれは、テーブルの1列である)

Client: 25 Harris, Eddie 
Animals: Koshka(cat),Gutsy(snake),Edger(snake),Fritz(cat),George(turtle),Big Mike(turtle) 

これは私が試したものです:

select group_concat (distinct 
     'Client: ', CL.cl_id, space(1), 
     CL.cl_name_last,', ', 
     CL.cl_name_first,'\n', 
     'Animals: ', AN.an_name, '(', 
     ifnull(AN.an_type, 'No Animals'), ')', '\n') as 'Client Info' 
from p_vets.vt_clients CL 
join p_vets.vt_animals AN using (cl_id) 
group by CL.cl_id; 

私は次の出力を得ます(テーブルから小さな部分):

Client: 25 Harris, Eddie 
Animals: Koshka(cat) 
,Client: 25 Harris, Eddie 
Animals: Gutsy(snake) 
,Client: 25 Harris, Eddie 
Animals: Edger(snake) 
,Client: 25 Harris, Eddie 
Animals: Fritz(cat) 
,Client: 25 Harris, Eddie 
Animals: George(turtle) 
,Client: 25 Harris, Eddie 
Animals: Big Mike(turtle) 

私は動物をグループ化する方法を理解していません彼らが所属する各顧客の下に託されています。

ありがとうございました。

答えて

1

group_concatには、動物の部分のみを含める必要があります。

はこれを試してみてください:

select concat(
      'Client: ', CL.cl_id, space(1), CL.cl_name_last,', ', CL.cl_name_first,'\n', 
      'Animals: ', group_concat(
      concat(AN.an_name,'(',coalesce(AN.an_type, 'No Animals'),')') 
     ) 
     ) 
from p_vets.vt_clients CL 
join p_vets.vt_animals AN using (cl_id) 
group by cl_id; 
+0

ありがとうございました! :)もう1つの質問ですが、私がテーブルに参加したままにして、クライアントの1人が動物が合体しないと表示されます(AN.an_type、 'No Animals') 'はまだ動作しますか?それは、動物のないすべてのエントリーに対して私に平易な「NULL」を与えます。 – notrockstar

+0

@notrockstar 'GROUP_CONCAT'を別の' COALESCE() 'で囲みます。 –

+0

ここでは合体していますが、ここではちょっと離れているようです - 動物が名前を持ち、型がない場合をキャッチします。動物がいない場合には、group_concatの外側に合体が必要です。 – awm