SQLでmultple列をGROUP_CONCAT

次のとおりです。

私は2つのテーブルを持っています。

最初の表は、従業員と呼ばれています

  |イード| ENAME | 給与| 
========================= 
  | 1 | A | 300 | 
  | 2 | B | 400 | 
  | 3 | O | 500 |

2番目の表は、Employee_Sal_Changesと呼ばれています

  | EID | Salary_Change_History | 今年
======================================= 
  | 1 | 100 | 2012年
  | 1 | 200 | 2013 
  | 1 | 300 | 2014 
  | 2 | 200 | 2013 
  | 2 | 400 | 2014 
  | 3 | 100 | 2011 
  | 3 | 200 | 2012 
  | 3 | 300 | 2013 
  | 3 | 500 | 2014

私のフロントエンドテーブルでは、私が表示したいと思い

ID |給与変更履歴| 
================================= 
 A | 100:2012 | 
      | 200:2013 | 
      | 300:2014 | 
================================= 
 B | 200:2013 | 
      | 400:2014 | 
================================= 
 O | 100:2011 | 
      | 200:2012 | 
      | 300:2013 | 
      | 400:2014 | 
=================================

私はsalary_change_history年EIDにmached取得し、ループを使用することにより、フロントエンドでそれらを表示したいと思います。

それらを取得するには、私はGROUP_CONCATを使用して配列に格納しようとしたが、それが唯一の値を取得する場所EID = 1

ここでは、バックエンドでのクエリがあります

Select 
(select Group_Concat(Employee_Sal_Changes.Salary_Change_History),(Group_Concat(Employee_Sal_Changes.year) from Employee_Sal_Changes left join Employee on Employee_Sal_Changes.EID = Employee.EID), 
Employee.EName
From Employee_Sal_Changes

より良い方法はありますかGROUP_CONCATを使用し続けるだけ?

GMB:

あなたは、集約を使用することができます。

select 
    eid, 
    group_concat(
        year, ':', salary_change_history 
        order by year
        separator '\n'
    ) salary_change_history
from employee_sal_changes
group by eid

各従業員のために、これはリスト生成<year>:<salary>キャリッジリターンで区切られた値。あなたが持参する必要はありませんemployee、他のテーブルには、すべての必要な情報があります。その結果セットを生成するテーブル。

DBフィドルのデモ

ここでは、画像の説明を入力します。


あなたにも、従業員の名前をしたい場合:

select 
    s.eid, 
    e.ename,
    group_concat(
        s.year, ':', s.salary_change_history 
        order by s.year
        separator '\n'
    ) salary_change_history
from employee_sal_changes s
inner join employee e on e.eid = s.eid
group by s.eid, e.ename

おすすめ

転載: http://10.200.1.11:23101/article/api/json?id=408599&siteId=1