この男は、リストから最大数を選択します (このコードを mySQL UI のイミディエイト/クエリ ウィンドウまたはコマンド ラインから実行してテストできます)。
SET @foo = CONCAT('SELECT ', REPLACE('40,50,10,20', ',', ' UNION ALL SELECT '));
SET @foo = CONCAT('SELECT * FROM (', @foo, ' ORDER BY 1 DESC) AS uncleFoo LIMIT 1');
PREPARE STMT FROM @foo;
EXECUTE STMT;
DEALLOCATE PREPARE STMT;
そう。最初の "SET @foo" は一種の展開関数です。リストから数値を選択してテーブルの行に入れる SQL を作成します。上記の例では、ご覧のとおり「40,50,10,20」と入力しましたが、「,」の代わりに任意の数の項目と任意の区切り記号を使用できます。
2 番目の「SET」行にコメントを付けてクエリを実行し、正確に何が起こるかを確認します。
次の "SET @foo" はクエリを拡張して、最大数のみが返されるようにします ("SELECT max([field])" のようなものですが、クエリの性質上、ここでは 'max' を使用できません)。 .
次に、クエリを実行して、リストから最大数のみを返すようにします。
結果でフィールドを更新したい場合は、次のようにクエリを拡張する必要があります。
UPDATE myTable SET myField=[value from above @foo execution] WHERE [your clause]
この時点から、特定のケースで必要なフィールドを更新する方法を簡単に理解できると思います。
何かを修正するために「1 回限りの実行」ではない場合、上記のコードを関数に移動することもできますが、後でこの更新も必要になります。
お役に立てれば!