0

いくつかの条件に一致するテーブルの結果を更新したい (つまり、他のテーブルの変数を SELECT ステートメントに一致させる)

ネット上でこれに似たものを見つけました:

START TRANSACTION;
SELECT * FROM score_test,score_2,score_3, etc WHERE score=20000 AND score_test.id=score_2.id AND etc.. FOR UPDATE;
UPDATE score_test SET name='Test';
COMMIT;

:UPDATE score_test SET ... WHEREは、SELECTステートメントを満たす結果を収集する必要があるため、私のニーズを満たしていません

しかし、うまくいきませんでした。それは私のすべてのフィールドを更新します。私が探しているのは、SELECT ステートメントからの結果のみを更新するために使用する構文です。

私のデータベースは10〜15のテーブルに分割されており、他のテーブルからのクエリに依存するいくつかの条件を厳密に達成するいくつかのフィールドを更新する必要があるため、条件が異なる場合があります.

4

2 に答える 2

3

SQLステートメントは、ステートメントと同じように句UPDATEを受け入れます。WHERESELECT

UPDATE score_test SET name='Test' WHERE score=20000;

編集

次の部分は、次UPDATEの a の部分とほぼ同じように扱うこともできます。つまり、結合を行うことができます。SELECTFROM

UPDATE score_test 
  JOIN test ON test.id=score_test.test_id
SET score_test.name = 'Test'
WHERE score_test.score=20000

これに関するヒントは、構文定義でシンボルを使用するUPDATE ドキュメントにあります。table_referenceの構文は JOIN ページtable_referenceで定義されています。と の両方のクエリで同一の処理を意味します。SELECTUPDATE

注意してくださいFOR UPDATE

ステートメントのFOR UPDATE句は、実際には更新に関連することは何もしません...行のロックを収集するだけです。必要なすべての JOINS と WHERE を実行する適切なクエリを使用して、それに従う必要があります (おそらく と同じです) 。SELECTUPDATESELECT

于 2012-08-25T19:40:48.013 に答える
0

あなたが求めていることを達成する方法は複数あります。あなたの質問を満たす最も簡単な方法は、更新を行うことです。

UPDATE score_test SET name='Test' WHERE score=20000;

複数のテーブルから条件を満たしたい場合は、select ステートメントと同様に、update ステートメントで結合を使用できます。

このような複雑なユースケースがある場合は、編集するアイテムの ID を保持する一時テーブルを作成し、必要なDELETEセットが得られるまで複数のクエリを使用してそのテーブルを 1 つずつ選択することで、さらに目標を達成できます。更新します。

于 2012-08-25T19:42:21.710 に答える