Ответ 1
Попробуйте
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)
Что я хочу сделать:
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
Попробуйте
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)
Чтобы обойти 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)