gpt4 book ai didi

mysql - 使用连接根据 MySQL 上的日期更新记录

转载 作者:行者123 更新时间:2023-11-29 17:56:09 27 4
gpt4 key购买 nike

我有上面所有的表格。

汽车模型

----------------------------- 
id | car_model_name|status |
-----------------------------
1 | seria_1 | 1 |
-----------------------------
2 | golf_4 | 1 |
-----------------------------
3 | C_Class | 1 |
-----------------------------
4 | golf_5 | 1 |
-----------------------------
5 | seria_2 | 0 |
-----------------------------

汽车制造商_tbl

------------------------- 
id |car_manufactu_name |
-------------------------
1 | bmw |
-------------------------
2 | volkswagen |
-------------------------
3 | mercedes |
-------------------------

汽车服务_tbl

--------------------------------- 
id | model_id| service_date |
---------------------------------
1 | 1 | 2018-03-10 |
---------------------------------
2 | 2 | 2018-02-10 |
---------------------------------
3 | 1 | 2018-01-10 |
---------------------------------
4 | 1 | 2017-12-10 |
---------------------------------
5 | 2 | 2017-12-10 |
---------------------------------
6 | 3 | 2018-02-10 |
---------------------------------
7 | 2 | 2018-01-10 |
---------------------------------
9 | 4 | 2018-03-10 |
---------------------------------
10 | 4 | 2018-02-10 |
---------------------------------
11 | 5 | 2018-02-10 |
---------------------------------

汽车模型制造商关系

-------------------------------------------------
id | model_id | manufactu_id| service_status |
-------------------------------------------------
1 | 1 | 1 | 1 |
-------------------------------------------------
2 | 5 | 1 | 1 |
-------------------------------------------------
3 | 2 | 2 | 1 |
-------------------------------------------------
4 | 4 | 1 | 1 |
-------------------------------------------------
5 | 2 | 2 | 1 |
-------------------------------------------------
6 | 3 | 3 | 1 |
-------------------------------------------------

我需要更新car_model_manufacturer_relation.service_status = '0'其中car_service_tbl.service_date <“2018-03-01”

在本例中,型号 2、3 和 5 的 car_model_manufacturer_relation.service_status 应设置为 '0',因为每个 car_service_tbl.service_date这些模型小于“2018-03-01”。

但是,对于型号 1 和 4 car_model_manufacturer_relation.service_status 应保留 '1',因为即使它们的记录小于“2018-03-01”,它们也有更大的日期例如。 “2018-03-10”。

我正在尝试为此创建一个查询,但到目前为止还没有成功。

最佳答案

您需要嵌套一个分组查询,以获取每个模型的最大日期,并从中进行更新。

update car_model_manufacturer_relation as cmmr, 
(select model_id, max(service_date) as check_date
from car_service_tbl
group by model_id) as cst
set cmmr.service_status = '0'
where cmmr.model_id = cst.model_id
and cst.check_date < "2018-03-01"

如果您使用多个表并且表名称包含下划线,我会尝试为表添加别名,以使代码更短、更容易阅读,因此使用 cmmr 和 cst 作为表别名。

为了清楚起见,MAX 日期也已重命名为 check_date。您当然可以将其命名为任何您想要的名称。

关于mysql - 使用连接根据 MySQL 上的日期更新记录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48805617/

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