如何用MySQL将Table2的last_value更新为Table1的最新记录值?
问题解决:更新table2为table1最新记录的值
问题背景
现有两张表:
table1
| id | time | value |
|---|---|---|
| 1 | 2024-01-09 22:24:14 | 100 |
| 2 | 2024-01-10 22:25:14 | 200 |
| 3 | 2024-01-11 22:26:14 | 300 |
table2
| id | last_value |
|---|---|
| 1 | --- |
需要将table2中id=1的last_value更新为table1里最新时间对应的value(即300),但执行以下脚本后,结果总是被更新为table1第一条记录的100:
update Table1, Table2 set Table2.last_value = Table1.Value where Table2.Id=1;
问题原因
原脚本未对table1做筛选或排序,直接关联两张表时,数据库会随机匹配table1中的一条记录(示例中恰好匹配到第一条),无法定位到最新的那条数据。
解决方案
通用写法(多数数据库适用)
通过子查询先获取table1中时间最晚的value,再更新table2:
UPDATE Table2 SET last_value = ( SELECT value FROM Table1 ORDER BY time DESC LIMIT 1 -- MySQL、PostgreSQL使用该语法 ) WHERE id = 1;
SQL Server 适配写法
SQL Server不支持LIMIT,需替换为TOP 1:
UPDATE Table2 SET last_value = ( SELECT TOP 1 value FROM Table1 ORDER BY time DESC ) WHERE id = 1;
关联子查询写法
如果需要更明确的关联逻辑,可先筛选出table1的最新记录,再关联更新:
UPDATE Table2 t2 SET last_value = t1.value FROM ( SELECT value FROM Table1 ORDER BY time DESC LIMIT 1 ) t1 WHERE t2.id = 1;
内容的提问来源于stack exchange,提问作者Sudheera Warnasooriya
相关产品推荐
相关产品推荐

