MYSQL 基于等于另一个 ID 的行索引进行更新 Table
MYSQL Update Based On A Row Index Equaling An ID In Another Table
我有两个 table。我想根据 table2 中的同一行索引更新 table1 中的一行。 ID 不匹配,但 table 2 中的 ID 与行索引匹配。 table2中总会有更多的数据,但我不在乎是否遗漏了额外的行。
我如何在 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 |
这可行,但不是很漂亮。
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 以获取灵感。
我有两个 table。我想根据 table2 中的同一行索引更新 table1 中的一行。 ID 不匹配,但 table 2 中的 ID 与行索引匹配。 table2中总会有更多的数据,但我不在乎是否遗漏了额外的行。
我如何在 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 |
这可行,但不是很漂亮。
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 以获取灵感。