2012-01-29 2 views
0

С моим ограниченным доступом я могу запускать только один запрос за раз. Довольно часто мне приходится запускать запрос, подобный приведенному ниже, для десятков идентификаторов. Один за другим он превращается в довольно трудоемкую задачу.MySQL Query Optimization - ограничение одиночного запроса

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

В идеале я хотел бы использовать что-то вроде ид в {ID1, ID2, ...}, однако оба экземпляра удостоверения личности должны быть одинаковыми.

Я пытаюсь изменить запрос, чтобы он мог обрабатывать число ID в одном запросе.

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

РАСТВОР (довольно просто на самом деле):

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 служат в качестве первичного ключа в обеих таблицах. –

ответ

0

вы можете попробовать это.

для T-SQL:

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

для MySQL:

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

Try 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>