首页 > 解决方案 > MYSQL - 使用复合主键从另一个表更新表

问题描述

我有一个不寻常的情况,我必须用另一个表的值更新一个表,这两个表是相同的。

Table 1 and Table 2
+-------------+----------+------+-----+---------+-------+
| Field       | Type     | Null | Key | Default | Extra |
+-------------+----------+------+-----+---------+-------+
| timeStamp   | datetime | NO   | PRI | NULL    |       |
| obj_id      | int(10)  | NO   | PRI | NULL    |       |
| value       | double   | YES  |     | NULL    |       |
+-------------+----------+------+-----+---------+-------+

我需要使用存储在 table2 中的值更新 table1。

我已经尝试过在 SO 上找到的一些有用的信息...

经过几次尝试,我想出了这样一个查询:

UPDATE table1 AS f  
    SET table1.value = t.value 
FROM table2 AS t 
WHERE (f.timeStamp, f.obj_id) = (t.timeStamp,t.obj_id);

ofc到目前为止还没有运气:(

该错误是最常见的错误: ERROR 1064 (42000):您的 SQL 语法有错误;检查与您的 MySQL 服务器版本相对应的手册,以在第 1 行的 'FROM table2 AS t WHERE (f.timeStamp, f.obj_id) = (t.timeStamp,t.obj_id)' 附近使用正确的语法

标签: mysqlsql-updatecomposite-primary-key

解决方案


查看 UPDATE 语句的语法,尤其是多表语法。

UPDATE table1 f 
JOIN table2 t
    ON f.timeStamp = t.timestamp AND f.obj_id = t.obj_id
    SET f.value = t.value;

推荐阅读