web-dev-qa-db-ja.com

MySql更新ステートメントでローカル変数を設定する方法(構文?)

Updateステートメントの実行中に変数を設定するにはどうすればよいですか?構文がわからないようです。

だから私はこのようなものが欲しいのですが、構文が間違っていると言っています:

SET @tempVariable := 0;
UPDATE myTable SET col1 = 5, col2 = @tempVariable, @tempVariable := 100;
21
Ray

これは可能です:-

 UPDATE myTable SET col1 = 5,
 col2 = (@tempVariable:=@tempVariable+1) // to increment

整数を設定するには(増分ではない)

 UPDATE myTable SET col1 = 5, 
 col2 = (@tempVariable:=100) // to assign any integer
21
ajreal

このようなものを取得したい場合:

SET @tempVariable := 0; UPDATE myTable SET col1 = 5, col2 = @tempVariable, @tempVariable := 100;

あなたはこのようなトリックを行うことができます:

  • 列の値を作成します。

ALTER TABLE Proj ADD col3 numeric;

  • 必要な変数(@tempVariable)を設定するには、col3に値を指定します。

SET @tempVariable := 0; UPDATE myTable SET col1 = 5, col2 = @tempVariable, col3 = @tempVariable := 100;

  • Col3をドロップします。

ALTER TABLE Proj DROP col3;

このようにして、テーブルの属性を変更せずに値を変数に割り当てることができます。動的な値を設定する場合に非常に便利です。

例えば: @tempVariable := @otherVariable + 100;

6
kiquenet85

キーは ":="演算子です。 MySQLユーザー変数

SET以外のステートメントで、ユーザー変数に値を割り当てることもできます。この場合、代入演算子は=ではなく:=でなければなりません。後者は非SETステートメントでは比較演算子=として扱われるためです。

1更新列のいずれかを使用

SET @tempVariable := 0;

UPDATE myTable 
SET col1 = 5, 
    col2 = @tempVariable := 100, 
    col3 = @tempVariable := col2 + 1;

@ tempVariableは常に100で、col3は常に101です。mySQLはテーブル内の元の値ではなく、新しく割り当てられた値を使用するようです。これはMS SQLとは異なります。より明確にするために、次の例を試してください。col3および@tempVariableの値は1001になります。

UPDATE myTable 
SET col1 = 5, 
    col2 = @tempVariable := 100, 
    col2 = 1000
    col3 = @tempVariable := col2 + 1;

2テーブルの更新列以外の列を使用します。

UPDATE myTable 
SET col1 = 5, 
    col2 = @tempVariable := 100, 
    col3 = @tempVariable := col4 + 1;

@tempVariableとcol3は同じ値になります。それらは、col4の元の値+ 1になります。

2
Shen liang

私は選択を使用して同様のクエリをテストしましたが、それは私にとってはうまくいったので、次のようにクエリを書き換えます

SET @tempVariable := 0;
UPDATE myTable SET col1 = 5, col2 = (SELECT @tempVariable + 100);

お役に立てば幸いです。

0

私はこのようなことをするためにphpまたはcoldfusionを使用しました(phpの例)

function something($param){

   $localVarCleaned = mysql_real_escape_string($param);

   mysql_query("
   UPDATE tablename
   SET col = ".$localVarCleaned."
   ");
}
0