2012-01-29 10 views
0

は、私は一度に単一のクエリを実行することができます。かなり頻繁に、数十のIDに対して以下のようなクエリを実行する必要があります。 1つ1つそれはかなり時間のかかる作業に変わります。MySQLのクエリの最適化 - 私のアクセスが制限された単一のクエリ制限

UPDATE table1 
SET columnA = X, 
     columnB = (SELECT max(columnC) FROM table2 WHERE id = <ID>) 
WHERE id = <ID> 

理想的には、私は{...、ID1、ID2}でIDのようなものを使用したい、しかしながらIDの両方のインスタンスが同じでなければなりません。

私はそれは、単一のクエリでIDの数を処理できるようにクエリを変更しようとしています。

============================================== ====

SOLUTION(非常に簡単実際に):

UPDATE table1 
SET columnA = X, 
     columnB = (SELECT max(columnC) FROM table2 WHERE id = table1.id) 
WHERE id in (id1, id2, ...) 
+0

両方のテーブルに関連がありますか? –

+0

テーブル1とテーブル2にはidカラムがあります。 idは両方のテーブルのプライマリキーとして機能します。 –

答えて

0

あなたがこれをしようとする場合があります。 MySQLの

UPDATE a 
SET  a.columnA = X, 
     a.columnB = max(b.columnC) 
FROM table1 a INNER JOIN table b ON a.id = b.id 
WHERE a.id IN ('ID','HERE',...) 

UPDATE

:T-SQLのための

UPDATE table1 a INNER JOIN 
        (SELECT id, Max(columnC) As iMax 
        FROM table12 
        GROUP BY id) b ON a.id = b.id 
SET  a.columnA = X, 
     a.columnB = b.iMax 
WHERE a.id IN ('ID','HERE',...) 

REFERENCE

+0

「グループ機能の無効な使用」が表示されています。 –

+0

@LukeG MySQLで私の更新答えを試してください。 –

+0

それはUPDATEおよびLIMITの誤った使用方法 'を返します。この時間 –

0

belwoを試してみてください。私はちょうど方法を説明したので、必要な変更を行ってください。

UPDATE table1 as t1 INNER 
     JOIN (
      SELECT id 
       , Max(columnC) As maxval 
      FROM table12 
      GROUP 
       BY id 
      ) As t2 ON t1.id= t2.id 
    SET columnA = t1.x 
    FROM columnB = t2.maxval 
    WHERE id = <ID>