2016-09-07 3 views
0

私は2つのテーブルを持っています。私はtable2の同じ行のインデックスに基づいてtable1の行を更新したいと思います。 IDは一致しませんが、表2のIDは行インデックスと一致します。表2にはさらに多くのデータがありますが、余分な行が見付からない場合は気にしません。別のテーブルのIDと等しい行インデックスに基づくMYSQLアップデート

私はこれを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]、または2番目の行の行[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を参照してください。

関連する問題