gpt4 book ai didi

mysql - 如何从三个表中查询如下

转载 作者:行者123 更新时间:2023-11-29 06:41:42 25 4
gpt4 key购买 nike

我有三个表项目、daily_activity 和completed_works。每个项目可能有不同的日常事件。每一项日常事件,都有几件作品。您可以查看下表以了解整个想法。

项目表:

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

daily_activity 表:

 ---------------------------------------------------
| 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搜索da_id,然后根据da_id从已完成的作品中获取记录,主要是我想获取da_date,例如在下表中您可以看到work_code = w001在DA_ID = 1下,已完成DA_DATE = 2018年12月20日。

期望的结果

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

我已经尝试过,但我不明白如何获取 da_date。这是我的查询

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

在此查询中,我可以通过使用 IN 子句获取 PROJECT_ID 为 1 下的 DA_ID。但不知道如何获取 DA_DATE。

最佳答案

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

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

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

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

您可以选择所需的列,而不是使用 *。当您添加连接类型时,连接会变得复杂。上面的连接实际上是内连接。

enter image description here

关于mysql - 如何从三个表中查询如下,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51335900/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com