如何从下面的三个表进行查询

rekjcdws  于 2021-06-20  发布在  Mysql
关注(0)|答案(1)|浏览(342)

我有三个表项目,每天的活动,和完成的工作。每个项目可能有不同的日常活动。每一天的活动,都有几件作品。你可以查看下表来了解整个情况。
项目表:

------------------------------------
|   PROJECT_ID  |   PROJECT_NAME    |
------------------------------------
|       1       |       PROJ1       |
------------------------------------    
|       2       |       PROJ2       |
------------------------------------

每日活动表:

---------------------------------------------------
|   DA_ID   |   PROJECT_ID      |       DA_DATE     |
 ---------------------------------------------------
|   1       |       1           |       20/12/2018  |
 ---------------------------------------------------
|   2       |       1           |       21/12/2018  |
 ---------------------------------------------------
|   3       |       2           |       23/12/2018  |
 ---------------------------------------------------

已完成的工作表:

----------------------------------------------------------------------------
|   ID  |       DA_ID       |       work_code       |       work_desc       |
----------------------------------------------------------------------------
|   1   |       1           |           w001        |       work desc. 1    |
----------------------------------------------------------------------------
|   2   |       2           |           w002        |       work desc. 2    |
----------------------------------------------------------------------------
|   3   |       2           |           w003        |       work desc. 3    |
----------------------------------------------------------------------------
|   4   |       1           |           w004        |       work desc. 4    |
----------------------------------------------------------------------------    
|   5   |       3           |           w005        |       work desc. 5    |
----------------------------------------------------------------------------

我想根据项目id获取已完成工程记录。首先根据项目id搜索数据id,然后根据数据id从已完成工程中获取记录,主要是我想获取数据日期。例如,在下表中,您可以看到工作代码=w001位于数据id=1下,该数据已完成数据日期=20/12/2018。
期望结果

----------------------------------------------------------------------------
|   ID  |   work_code       |       work_desc       |       DA_DATE         |
----------------------------------------------------------------------------
|   1   |       w001        |       work desc. 1    |       20/12/2018      |
----------------------------------------------------------------------------
|   2   |       w002        |       work desc. 2    |       21/12/2018      |
----------------------------------------------------------------------------
|   3   |       w003        |       work desc. 3    |       21/12/2018      |
----------------------------------------------------------------------------
|   4   |       w004        |       work desc. 4    |       20/12/2018      |
----------------------------------------------------------------------------

我试过了,但我不明白怎么才能得到约会。这是我的问题

SELECT * FROM completed_works
WHERE DA_ID IN (SELECT D.ID FROM daily_activity as d WHERE PROJECT_ID = 1)

在这个查询中,我可以使用in子句获得项目\ id为1下的数据\ id。但我不知道怎么和她约会。

olmpazwi

olmpazwi1#

这通常是通过连接表来完成的。我总是喜欢这样做:

SELECT *
FROM completed_works, daily_activity, project,
WHERE completed_works.DA_ID = daily_activity.DA_ID AND
      aily_activity.PROJECT_ID = project.PROJECT_ID;

这很容易理解。但大多数人实际上会使用连接语法:

SELECT *
FROM completed_works
JOIN daily_activity ON completed_works.DA_ID = daily_activity.DA_ID
JOIN project ON daily_activity.PROJECT_ID = project.PROJECT_ID;

两个查询是等价的。请参见:https://dev.mysql.com/doc/refman/8.0/en/join.html
您可以选择所需的列,而不必使用 * . 连接变得复杂的地方是添加连接类型。上面的连接实际上是内部连接。

相关问题