2017-11-15 26 views
0

私は3つのテーブルを1つに結合したい、私は結合のような異なる方法を試したが、どういうわけか自分自身を私は書くことができないので、正しく動作するようになる。私は名前で測定をマッピングしたいJava Spring SQL 3テーブルを1つに結合/結合する方法

measurement_data_pointsをmeasurement_idし、その後、私は含まれていIDでMEASUREMENT_POINT

data_points_idでmeasurement_data_pointsをマッピング一番下の方が明確な理解を得たいと思っています。

マイテーブル:

+-------------------------+ 
| Tables_in_db_datapoints | 
+-------------------------+ 
| measurement    | 
| measurement_data_points | 
| measurement_point  | 
+-------------------------+ 

測定テーブル

mysql> select * from measurement; 
+----+----------------------+ 
| id | name     | 
+----+----------------------+ 
| 1 | identifiedNeed  | 
| 2 | identifiedBackground | 
| 3 | identifiedGoal  | 
+----+----------------------+  

measurement_data_pointsテーブル

mysql> select * from measurement_data_points; 
+----------------+----------------+ 
| measurement_id | data_points_id | 
+----------------+----------------+ 
|    1 |    1 | 
|    1 |    2 | 
|    1 |    3 | 
|    1 |    4 | 
|    2 |    5 |  
|    2 |    6 | 
|    2 |    7 | 
|    2 |    8 | 
|    3 |    9 | 
|    3 |    10 | 
|    3 |    11 | 
|    3 |    12 | 
+----------------+----------------+ 

MEASUREMENT_POINTテーブル

+----+------------+-----+----------+--------+ 
| id | date  | f1 | precison | recall | 
+----+------------+-----+----------+--------+ 
| 1 | 2017-11-19 | 0.3 |  0.5 | 0.2 | 
| 2 | 2017-11-12 | 0.7 |  0.4 | 0.15 | 
| 3 | 2017-11-15 | 0.5 |  0.3 | 0.1 | 
| 4 | 2017-11-18 | 0.6 |  0.2 | 0.05 | 
| 5 | 2017-11-19 | 0.2 |  0.4 | 0.2 | 
| 6 | 2017-11-12 | 0.4 |  0.3 | 0.15 | 
| 7 | 2017-11-15 | 0.5 |  0.2 | 0.1 | 
| 8 | 2017-11-18 | 0.6 |  0.1 | 0.05 | 
| 9 | 2017-11-19 | 0.1 |  0.4 | 0.2 | 
| 10 | 2017-11-12 | 0.4 |  0.3 | 0.15 | 
| 11 | 2017-11-15 | 0.3 |  0.2 | 0.1 | 
| 12 | 2017-11-18 | 0.2 |  0.1 | 0.05 | 
+----+------------+-----+----------+--------+ 

私は結果は主に次のようになりたい:そのdoesntの仕事が、これは同様に動作した場合

+-----------------------+----------------+------------+-----+----------+   
| measurement_id  | data_points_id | date  | f1 | precison | recall | 
+-----------------------+----------------+------------+-----+----------+ 
| identifiedNeed  |    1 | 2017-11-19 | 0.3 |  0.5 | 0.2 | 
| identifiedNeed  |    2 | 2017-11-12 | 0.7 |  0.4 | 0.15 | 
| identifiedNeed  |    3 | 2017-11-15 | 0.5 |  0.3 | 0.1 
| identifiedNeed  |    4 | 2017-11-18 | 0.6 |  0.2 | 0.05 | 
| identifiedBackground |    5 | 2017-11-19 | 0.2 |  0.4 | 0.2 | 
| identifiedBackground |    6 | 2017-11-12 | 0.4 |  0.3 | 0.15 | 
| identifiedBackground |    7 | 2017-11-15 | 0.5 |  0.2 | 0.1 | 
| identifiedBackground |    8 | 2017-11-18 | 0.6 |  0.1 | 0.05 | 
| identifiedGoal  |    9 | 2017-11-19 | 0.1 |  0.4 | 0.2 | 
| identifiedGoal  |    10 | 2017-11-12 | 0.4 |  0.3 | 0.15 | 
| identifiedGoal  |    11 | 2017-11-15 | 0.3 |  0.2 | 0.1 | 
| identifiedGoal  |    12 | 2017-11-18 | 0.2 |  0.1 | 0.05 | 
+-----------------------+----------------+------------+-----+----------+ 

+----------------+----------------+------------+-----+----------+--------+ 
| measurement_id | data_points_id | date  | f1 | precison | recall | 
+----------------+----------------+------------+-----+----------+--------+ 
|    1 |    1 | 2017-11-19 | 0.3 |  0.5 | 0.2 | 
|    1 |    2 | 2017-11-12 | 0.7 |  0.4 | 0.15 | 
|    1 |    3 | 2017-11-15 | 0.5 |  0.3 | 0.1 | 
|    1 |    4 | 2017-11-18 | 0.6 |  0.2 | 0.05 | 
|    2 |    5 | 2017-11-19 | 0.2 |  0.4 | 0.2 | 
|    2 |    6 | 2017-11-12 | 0.4 |  0.3 | 0.15 | 
|    2 |    7 | 2017-11-15 | 0.5 |  0.2 | 0.1 | 
|    2 |    8 | 2017-11-18 | 0.6 |  0.1 | 0.05 | 
|    3 |    9 | 2017-11-19 | 0.1 |  0.4 | 0.2 | 
|    3 |    10 | 2017-11-12 | 0.4 |  0.3 | 0.15 | 
|    3 |    11 | 2017-11-15 | 0.3 |  0.2 | 0.1 | 
|    3 |    12 | 2017-11-18 | 0.2 |  0.1 | 0.05 | 
+----------------+----------------+------------+-----+----------+--------+ 
+0

あなたはHibernate、Java、Springに関する質問がありましたか? –

答えて

0

あなたが要求するクエリは非常に簡単です。それは他の2つと結合された "メイン"テーブル(測定)を使用します。 "結合"は、1つ以上のフィールドを使用して2つのテーブルをリンクする方法です。あなたのケースで は、たとえば、あなたがフィールドを使用してmeasurement_data_pointsと測定に参加することができます(SELECTコマンド内)は、次のsintaxを使用してmeasurement_id:

... 
FROM measurement A 
LEFT JOIN measurement_data_points B ON A.measurement_id= B.measurement_id 

は一度参加し、あなたのSELECTで二つのテーブルのすべてのフィールドを使用することができます。例えば。一緒にすべてを置く

... 
SELECT measurement.name 
    , measurement_data_points.data_points_id 
... 

、それは単純にする必要があります。代わりに、測定IDの測定名を持つ

SELECT measurement.measurement_id 
    , measurement_data_points.data_points_id 
    , measurement_point.date 
    , measurement_point.f1 
    , measurement_point.precison 
    , measurement_point.recall 
FROM measurement 
LEFT JOIN measurement_data_points ON measurement.measurement_id= measurement_data_points.measurement_id 
LEFT JOIN measurement_point ON measurement_data_points.data_points_id = measurement_point.id ; 

問合せ:

SELECT measurement.name 
    , measurement_data_points.data_points_id 
    , measurement_point.date 
    , measurement_point.f1 
    , measurement_point.precison 
    , measurement_point.recall 
FROM measurement 
LEFT JOIN measurement_data_points ON measurement.measurement_id= measurement_data_points.measurement_id 
LEFT JOIN measurement_point ON measurement_data_points.data_points_id = measurement_point.id ; 

ヒント:これらすべては、非常に単純なクエリであり、 SQL SELECTとSQL JOIN(インターネットで見る)について何かを読んでいる時間があれば、あなたはこのようなクエリをあなたのものにすることができます満足しています。 measurement_id、 b.data_points_id、 c.date、 c.f1、 c.precision、測定Aから c.recall、 measurement_data_pointsのB、 MEASUREMENT_POINTのC

AS
+0

A B Cとは何か混乱しているのは、Aを最初のテーブル、Bの2番目のテーブル、Cの3番目のテーブルと呼んでいますか? – Genesis

+0

テーブルの代替名(いわゆるエイリアス)ですが、好きなようにすべての名前で変更することができます。または、テーブルの元の名前のみを使用してください。更新された答えを参照してください...私はあなたがSQL言語のビットを知っていると思った... – etsa

+0

それは素晴らしいありがとう!しかし、それが私が望んでいた主な結果として現れるようにする方法はありますか?今、私は2番目の結果を得ます。私はidentifiendBackground等に向けるためにIDN1と2 2 2 2に回すためにID 1 1 1 1が必要です – Genesis

0

てみてください以下:

select M.Name, data_points_id, date, f1 ,precision , recall 
from measurement M 
Inner join measurement_data_points md on m.id=md.measurement_id 
inner join measurement_point mp on mp.id=md.data_points_id 
0

SELECT a.name .id = b.measurement_id およびb.measurement_id = c.measurement_id;

+2

このコードスニペットは問題を解決するかもしれませんが、[説明を含む](http://meta.stackexchange.com/questions/114762/explaining-entirely-code-based-answers)は本当にあなたの投稿の質を向上させるのに役立ちます。将来読者の質問に答えていることを覚えておいてください。そうした人々はあなたのコード提案の理由を知らないかもしれません。 – doydoy

関連する問題