我有两张桌子。我想基于table2中的相同行索引更新table1中的行。 ID不匹配,但表2中的ID与行索引匹配。表2中总会有更多数据,但我不在乎是否错过了额外的行。
我如何在mysql UPDATE语句中实现这一点?
table 1 ______________ table 2 _____________
Row number | id | value | Row number | id | value |
|--------------| |-----|-------|
1 | 2 | A | 1 | 1 | W |
2 | 4 | B | 2 | 2 | X |
3 | 6 | C | 3 | 3 | Y |
4 | 4 | Z |
to:
table 1 ______________
Row number | id | value |
|--------------|
1 | 2 | W |
2 | 4 | X |
3 | 6 | Y |
答案 0 :(得分:0)
这样可行,但它并不漂亮。
set @c=0;
update t1
join (
select tx.id,t2.value
from t2
join (
select @c:=@c+1 as rownum, value, id
from (
select * from t1 order by id
) t3
) tx
on t2.id=tx.rownum) tupdate
on t1.id = tupdate.id
set t1.value=tupdate.value;
它背后的基本点是使用变量来计算行数,然后使用它来加入。我最终使用了多个嵌套选择,因为要求是更新t1,但只有在计算了行的版本之后才会更新。
如果重复,则需要在开始时set
停止过度计数。请参阅MySQL - Get row number on select获取灵感。