質問

変数に単一の値を選択したいと思います。私はフォローしようとしました:

DECLARE myvar INT(4);

- すぐにいくつかの構文エラーを返します。

SELECT myvalue 
  FROM mytable 
 WHERE anothervalue = 1;

- 単一の整数を返します

SELECT myvalue 
  INTO myvar 
  FROM mytable 
 WHERE anothervalue = 1;

- 機能しない、@Myvarも試した

ストアドプロシージャや関数以外で宣言することは可能ですか?

たぶん私はユーザー変数の概念を取得しないだけかもしれません...私はちょうど試しました:

SELECT myvalue INTO @var FROM `mytable` WHERE uid = 1;
SELECT @var;

...それが想定されているように機能しました。しかし、一度に各クエリを実行すると、@var nullを取得します。

役に立ちましたか?

解決 2

最終的に、ストアドプロシージャが私の問題の解決策でした。これが役立ったものです:

DELIMITER //
CREATE PROCEDURE test ()
  BEGIN
  DECLARE myvar DOUBLE;
  SELECT somevalue INTO myvar FROM mytable WHERE uid=1;
  SELECT myvar;
  END
  //

DELIMITER ;

call test ();

他のヒント

私はこの同じ問題に出くわしましたが、何が混乱を引き起こしているのか知っていると思います。 MySQLクエリアナライザーを使用する場合、これを正常に行うことができます。

SELECT myvalue 
INTO @myvar 
FROM mytable 
WHERE anothervalue = 1;

ただし、同じクエリをMySQLワークベンチに配置すると、構文エラーが発生します。なぜ彼らが違うのかわかりませんが、そうです。 MySQLワークベンチで問題を回避するには、次のようなクエリを書き直すことができます。

SELECT @myvar:=myvalue
FROM mytable
WHERE anothervalue = 1;

これらの答えは、複数の変数をあまりカバーしていません。

ストアドプロシージャでインライン割り当てを行うと、結果が結果セットにも送信されます。それは混乱する可能性があります。 Selectを使用することは、複数の変数を持つ構文にselectに使用することです。

SELECT a, b INTO @a, @b FROM mytable LIMIT 1;

選択は1行のみを返す必要があります。したがって、制限1は必ずしも必要ではありません。

宣言する代わりにセットを使用することもできます

SET @myvar := (SELECT somevalue INTO myvar FROM mytable WHERE uid=1);

SELECT myvar;

あたり MySQLドキュメント 宣言は、開始の開始時にのみ動作します...保存されたプログラムのように、終了ブロック。

mysqlで変数を宣言する必要はありません。変数のタイプは、最初に値が割り当てられたときに自動的に決定されます。そのタイプは、整数、小数、フローティングポイント、バイナリまたは非バイナリ文字列、またはヌル値の1つです。詳細については、ユーザー定義の変数のドキュメントを参照してください。

http://dev.mysql.com/doc/refman/5.0/en/user-variables.html

select ... ingingに列を変数に割り当てることができます。

http://dev.mysql.com/doc/refman/5.0/en/select-into-statement.html

例:

mysql> SELECT 1 INTO @var;
Query OK, 1 row affected (0.00 sec)

mysql> SELECT @var;
+------+
| @var |
+------+
| 1    |
+------+
1 row in set (0.00 sec)

あなたができるという事実にもかかわらず、それは注目に値します SELECT INTO 次のようなグローバル変数:

SELECT ... INTO @XYZ ...

あなたはできる いいえ 使用する FETCH INTO 次のようなグローバル変数:

FETCH ... INTO @XYZ

そうではないようです バグ. 。誰かに役立つことを願っています...

Windows Vistaでバージョン6(Windows 6.0.9 Revision 11421 Build 1170)にバージョン6(MySQLワークベンチコミュニティ(GPL))を使用しています。次のオプションに問題はありません。これらの人たちが3年前に問題を抱えていたので、おそらく彼らはそれを修正しました。

/* first option */
SELECT ID 
INTO @myvar 
FROM party 
WHERE Type = 'individual';

-- get the result
select @myvar;

/* second option */
SELECT @myvar:=ID
FROM party
WHERE Type = 'individual';


/* third option. The same as SQL Server does */
SELECT @myvar = ID FROM party WHERE Type = 'individual';

上記のすべてのオプションは、私に正しい結果を与えてくれます。

あなたはあなたの価値の前に @シンボルを見逃しているかもしれません、そのように select 'test' INTO @myValue;

今そのような問題を抱えている人のために、テーブルにエイリアスを入れてみてください。これはトリックが必要です。

SELECT myvalue 
  INTO myvar 
  FROM mytable x
 WHERE x.anothervalue = 1;

それは私のために働いた。

乾杯。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top