如何使用mysql中的另一个表逐行更新表
我正在尝试使用另一个以行号作为索引的表来更新表字段 表1如何使用mysql中的另一个表逐行更新表,mysql,sql,Mysql,Sql,我正在尝试使用另一个以行号作为索引的表来更新表字段 表1 |QuestionKey | Value | | Q31 | 1 | | Q33 | 3 | | Q44 | 5 | 表2 |Id | Value| | 1 | 3 | | 2 | 4 | | 3 | 1 | 我想使用表2更新表1中的值,按位置匹配行。 我和我的同事已经尝试了以下查询: set @rank=0; update table1 j set
|QuestionKey | Value |
| Q31 | 1 |
| Q33 | 3 |
| Q44 | 5 |
表2
|Id | Value|
| 1 | 3 |
| 2 | 4 |
| 3 | 1 |
我想使用表2更新表1中的值,按位置匹配行。
我和我的同事已经尝试了以下查询:
set @rank=0;
update table1 j
set j.`Value` = (SELECT a.Value from table2 a WHERE a.id = @rank:=@rank+1)
使用此查询,mysql向我指出错误:错误代码:1242。子查询返回多行
有人知道我该怎么做,或者我的查询有什么问题吗
谢谢大家的帮助:)问题是
where
子句被计算了多次。我想你可以用限制来解决这个问题。另一种方法是明确表之间的联接和关系:
update table1 t join
(select t.*, @rank := @rank + 1 as seqnum
from table1 t cross join (select @rank := 0) vars
order by QuestionKey
) tt
on tt.QuestionKey = t.QuestionKey join
table2 t2
on t2.id = tt.seqnum
set t.`Value` = t2.Value;
Thnak you:)。对我的上下文进行了一些修改后,效果很好。