2016-09-07 51 views
0

我有两个表。我想根据table2中的同一行索引更新table1中的一行。这些ID不匹配,但是表2中的ID与行索引匹配。表2中总是会有更多的数据,但我不在乎是否错过了额外的行。基于行索引的MYSQL更新等于另一个表中的ID

我如何在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

“行索引” - 那是什么? – Strawberry

+0

'行号'是基于什么排序? – 1000111

+0

表中的行号。即第一行行[0]或第二行行[1]。 –

回答

0

这有效,但它并不漂亮。

set @c=0; 
update t1 
join (
    select tx.id,t2.value 
    from t2 
    join (
     select @c:[email protected]+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

相关问题