MySQL запрос для обновления поля до макс (поле) + 1 - PullRequest
12 голосов
/ 26 июля 2010

Что я хочу сделать, это:

UPDATE table SET field = MAX(field) + 1 WHERE id IN (1, 3, 5, 6, 8);

Семантика этого утверждения, на мой взгляд, будет первой, когда база данных отключится и определит для меня, какое наибольшее значение field во всех table. Затем он добавил бы 1 к этому значению и присвоил бы полученное значение столбцу field строк с id 1, 3, 5, 6 и 8. Кажется достаточно простым ...

Когда я пытаюсь выполнить этот запрос, MySQL блокирует его и говорит:

ERROR 1111 (HY000): Invalid use of group function

Какой секретный соус вы должны использовать, чтобы получить желаемый результат?

С уважением, Vic

Ответы [ 2 ]

22 голосов
/ 26 июля 2010

Попробуй

UPDATE TABLE set field = ((SELECT selected_value FROM (SELECT MAX(field) AS selected_value FROM table) AS sub_selected_value) + 1) WHERE id in (1,3,5,6,8)

Нагло сорвал с Здесь

7 голосов
/ 26 июля 2010

Чтобы обойти mysql-error-1093, используйте подзапрос / производную таблицу / встроенное представление:

UPDATE table
      SET field = (SELECT x.max_field
                          FROM (SELECT MAX(t.field) + 1 AS max_field
                                        FROM TABLE t
                                       WHERE t.id IN (1,3,5,6,8) ) x)
...