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

时间:2014-09-17 23:28:07

标签: 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 j.`Value` = (SELECT a.Value from table2 a WHERE a.id = @rank:=@rank+1)

使用此查询,mysql指出错误:错误代码:1242。子查询返回超过1行。

任何人都知道我怎么能这样做或我的查询有什么问题?

谢谢大家的帮助:)

1 个答案:

答案 0 :(得分:0)

问题是where子句被多次评估。我想你可以使用limit解决问题。另一种方法是明确表格之间的连接和关系:

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;