我尝试使用另一个以行号作为索引的表来更新表字段。
表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行。
任何人都知道我怎么能这样做或我的查询有什么问题?
谢谢大家的帮助:)
答案 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;