SQL: использование таблицы назначения в инструкции UPDATE во вложенном предложении FROM - PullRequest
1 голос
/ 17 февраля 2009

У меня есть (mysql) таблица базы данных со следующими столбцами:

NAME | String (Unique)

STATUS | int

UPDATE_COUNT | int (Unique)

Я хочу, чтобы значение Max (UPDATE_COUNT) отражало совокупное количество обновлений, выполненных для строк в таблице. Например, начиная с пустой таблицы:

Insert - (Name=John, Status=0) -  // update count on that row is set to 1

Insert - (Name=Mary, Status=0) -  // update count on that row is set to 2

Update - (Name=John, Status=1) -  // update count on that row is set to 3

Update - (Name=Mary, Status=2) -  // update count on that row is set to 4

и т.д ..

Таким образом, для любой строки, обновленной или вставленной, значение счетчика обновлений, который вставляется или обновляется в каждой строке, равно max (update_count) + 1.

Идея состоит в том, что "select max (update_count) from mytable" результат представляет собой общее количество выполненных вставок / обновлений.

Я хотел бы написать операторы вставки и обновления SQL, которые автоматически увеличивают значение update_count, что-то вроде:

"UPDATE MYTABLE SET STATUS=1,UPDATE_COUNT=(SELECT MAX(UPDATE_COUNT) FROM MYTABLE) WHERE NAME IN ('John', 'Mary')"

Однако это недопустимый sql, оператор обновления может не содержать предложение from, выбираемое из той же таблицы, ошибка в mysql:

"You can't specify target table 'MYTABLE' for update in FROM clause"

Какие-либо предложения о том, как можно обойти это ограничение?

1 Ответ

2 голосов
/ 17 февраля 2009

Только что нашел следующее решение в отличном блоге Xaprb:

http://www.xaprb.com/blog/2006/06/23/how-to-select-from-an-update-target-in-mysql/

...