gpt4 book ai didi

MYSQL - 使用复合主键更新另一个表

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

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

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。

我尝试过在此处找到的一些有用的信息...

经过几次尝试,我提出了这样的查询:

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)”附近使用的正确语法

最佳答案

我首先编写一条 SELECT 语句,该语句显示要替换的现有值以及新值。这让我可以测试表达式,并直观地验证结果,例如

 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 作为将成为更新“目标”的表的别名,并使用 s 作为“来源”。)

然后,我将其转换为 UPDATE 语句,方法是将“SELECT ... FROM”替换为“UPDATE”关键字,并添加“SET” “WHERE”子句之前的“”子句

 UPDATE table1 s
JOIN table2 t
ON t.timestamp = s.timestamp
AND t.obj_id = s.obj_id
SET t.value = s.value
WHERE NOT ( t.value <=> s.value )

关于MYSQL - 使用复合主键更新另一个表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52821284/

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