首页 > 解决方案 > 如何在MYSQL中查询这样的多个表

问题描述

假设我的数据库中有一些这样的表。第一个是 DA 表,它有三列,我想根据 PROJECT_ID 查询其他表。

在此处输入图像描述

下一个是 WORK 表。我想通过特定的 da_id 计算 work_bonus 和 work_salary 的总和。 在此处输入图像描述

下一张表是费用表

在此处输入图像描述

下一个是产品表

在此处输入图像描述

最后一张是汇总表。我想像下面这张表一样打印 DA。这意味着假设我想根据 project_id "15" 搜索 da,因此我将从 da 表中获取两个 da_id,即 da_id 1 和 2。现在工作、费用和产品表具有 da_id 字段。所以我想从工作、费用和产品表中打印 DA 摘要。在 WORK 表 DA_ID 1 中有两条记录,即 work_id 1 和 3。我想根据 DA_ID 合计其 WORK_BONUS 和 WORK_SALARY 值,这意味着 DA_ID 1 的总 WORK_BONUS 将是 40,DA_ID 1 的 WORK_SALARY 将是 400。像这样,休息表计算将相同。这是我想要的决赛桌。那么你能帮我计算一下mysql中的结果吗?谢谢

在此处输入图像描述

文字版——

DA TABLE
-------------------------------------------------
|   DA_ID     |    PROJECT_ID  |      DA_DATE    |
-------------------------------------------------
|    1        |       15        |       8/7/18   |
-------------------------------------------------
|    2        |       15        |       4/7/18   |
-------------------------------------------------
|    3        |       14        |       6/7/18   |
-------------------------------------------------



WORK TABLE
--------------------------------------------------------------------
|   WORK_ID   |     DA_ID      |    WORK_BONUS  |      WORK_SALARY   |
--------------------------------------------------------------------
|    1        |       1        |       10       |           100      |
--------------------------------------------------------------------
|    2        |       2        |       20       |          200       |
-------------------------------------------------------------------
|    3        |       1        |       30       |          200       |
--------------------------------------------------------------------



EXPENSE TABLE
-----------------------------------------------------
|   EXP_ID    |    DA_ID        |      EXP_TOTAL    |
-----------------------------------------------------
|    1        |       1         |       10          |
-----------------------------------------------------
|    2        |       2         |       20          |
-----------------------------------------------------
|    3        |       1         |       30          |
-----------------------------------------------------



PRODUCT TABLE
-------------------------------------------------------------
|   PRODUCT_ID    |    DA_ID        |      PRODUCT_TOTAL    |
-------------------------------------------------------------
|       1         |       1         |       5               |
-------------------------------------------------------------
|       2         |       2         |       10              |
-------------------------------------------------------------
|       3         |       1         |       15              |
-------------------------------------------------------------


SUMMARY TABLE
----------------------------------------------------------------------------------------
|   SUMMARY_ID    |   DA_ID   |   TOTAL_BONUS  |   TOTAL_EXPENSE   |   TOTAL_PRODUCT   |
----------------------------------------------------------------------------------------
|       1         |     1     |        40      |        400        |         20        |
----------------------------------------------------------------------------------------
|       2         |     2     |        20      |        200        |         10        |
----------------------------------------------------------------------------------------

标签: mysql

解决方案


此查询将帮助您:

SELECT * FROM 
(
    SELECT sum(WORK_BONUS) AS TOTAL_BONUS, 
           sum(WORK_SALARY) AS TOTAL_SALARY 
    FROM WORK WHERE DA_ID = ?)
) t1,
(
    SELECT sum(EXP_TOTAL) as TOTAL_EXPENSE 
    FROM EXPENSE WHERE DA_ID = ?
) t2, 
(
    SELECT sum(PRODUCT_TOTAL) AS TOTAL_PRODUCT 
    FROM PRODUCT WHERE DA_ID = ?
);

推荐阅读