Java Spring SQL如何将3个表组合/连接成一个

标签 java mysql sql spring hibernate

我有 3 个表,我想将它们合并/连接成一个,我尝试了不同的方法,例如连接、左/右连接,但不知怎的,我在编写的语句数量中迷失了自己,所以我无法让它正常工作。

我想将测量中的名称映射到measurement_data_points中的measurement_id,然后映射data_points_id measurement_data_points 中的 measurement_point

中的 id

我在底部添加了一个虚构的结果,以便给出清晰的理解。

我的表格:

+-------------------------+
| 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 | 
+----------------+----------------+

测量点表

+----+------------+-----+----------+--------+
| 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 |
+----+------------+-----+----------+--------+

我希望结果主要是这样的:

+-----------------------+----------------+------------+-----+----------+        
| 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 |
+----------------+----------------+------------+-----+----------+--------+

最佳答案

您请求的查询非常简单。它使用与其他两个表连接的“主”表(测量)。 “联接”是一种使用一个或多个字段链接两个表的方法。 例如,在您的情况下,您可以使用以下语法(在 SELECT 命令内)使用字段measurement_id 将测量与measurement_data_points 连接起来:

...
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
...

把所有这些放在一起,应该很简单:

 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 ;

使用测量名称而不是测量 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 的内容(在 Internet 上查找),您将能够自己满意地进行这样的查询。

关于Java Spring SQL如何将3个表组合/连接成一个,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47304711/

相关文章:

java - hibernate :@OrderBy

php - 对来自 MySql 的记录进行分组

mysql - 避免列中重复数据

mysql - 无论如何,是否可以根据选择查询将数据插入表中?

java - 自定义对话框中的 NPE

java - @Path 不响应 Eclipse Tomcat 中 Java servlet 中的基本 @GET 请求

java - 如何按组聚合通量上的元素/如何按组减少?

php返回未定义的属性

php - Laravel 关系

sql - 获取列表的列