1

次の列を持つ(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です。

「mytableからmax(update_count)を選択」という考え方は、実行された挿入/更新の総数を表します。

update_countの値を自動的にインクリメントするinsertおよびupdatesqlステートメントを作成したいと思います。

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

この制限を回避する方法について何か提案はありますか?

4

1 に答える 1

2

優れた Xaprb ブログで次のソリューションを見つけました。

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

于 2009-02-17T10:40:33.067 に答える