我有一种不寻常的情况,我必须用另一个表中的值更新一个表,这两个表是相同的。
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到现在还没有运气:(
该错误是最常见的错误: 错误1064(42000):您的SQL语法有错误;在第1行的'FROM table2 AS t WHERE(f.timeStamp,f.obj_id)=(t.timeStamp,t.obj_id)'附近检查与MySQL服务器版本相对应的手册以使用正确的语法
答案 0 :(得分:0)
看看syntax的UPDATE语句,尤其是多表语法。
UPDATE table1 f
JOIN table2 t
ON f.timeStamp = t.timestamp AND f.obj_id = t.obj_id
SET f.value = t.value;
答案 1 :(得分:0)
我首先编写一个SELECT语句,该语句显示要替换的现有值以及新值。这使我可以测试表达式,并直观地验证结果,例如
null
(我通常将 SELECT t.obj_id
, t.timestamp
, t.value AS old_value
, s.value AS new_value
FROM table1 s
JOIN table2 t
ON t.timestamp = s.timestamp
AND t.obj_id = s.obj_id
WHERE NOT ( t.value <=> s.value )
用作将成为更新“目标”的表的别名,并将t
用作“源”的别名。)>
然后我将其转换为UPDATE语句,方法是将“ s
替换为“ SELECT ... FROM
”关键字,并在“ {{1}”之前添加“ UPDATE
”子句}“条款
SET