如何使用mysql中的另一个表逐行更新表

如何使用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

我正在尝试使用另一个以行号作为索引的表来更新表字段

表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 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:)。对我的上下文进行了一些修改后,效果很好。