MySQL:クエリの結果からユーザー変数を設定する


195

MySQLでのクエリの結果に基づいてユーザー変数を設定することは可能ですか?

私が達成したいのは次のようなものです(両方とも一意であるUSERと想定できますGROUP)。

set @user = 123456;
set @group = select GROUP from USER where User = @user;
select * from USER where GROUP = @group;

可能であることは知っていますが、ネストされたクエリでこれを実行したくないことに注意してください。

回答:


330

はい。ただし、変数の割り当てをクエリに移動する必要があります。

SET @user := 123456;
SELECT @group := `group` FROM user WHERE user = @user;
SELECT * FROM user WHERE `group` = @group;

テストケース:

CREATE TABLE user (`user` int, `group` int);
INSERT INTO user VALUES (123456, 5);
INSERT INTO user VALUES (111111, 5);

結果:

SET @user := 123456;
SELECT @group := `group` FROM user WHERE user = @user;
SELECT * FROM user WHERE `group` = @group;

+--------+-------+
| user   | group |
+--------+-------+
| 123456 |     5 |
| 111111 |     5 |
+--------+-------+
2 rows in set (0.00 sec)

用なおSET、いずれか=または:=代入演算子として使用することができます。ただし、他のステートメントの内部では、SET以外のステートメントでは比較演算子として扱われるため、代入演算子は必須では:=ありません。==


更新:

以下のコメントに加えて、次の操作も実行できます。

SET @user := 123456;
SELECT `group` FROM user LIMIT 1 INTO @group; 
SELECT * FROM user WHERE `group` = @group;

3
ところで、最初のステートメントの出力を(その唯一の変数割り当てとして)抑制し、2番目のクエリの出力のみを表示できますか?
Avada Kedavra

3
@Avada:変数割り当ての結果を出力しない別の方法で私の回答を更新しました。
Daniel Vassallo、

1
@DanielVassallo、もありselect grop into @group from user limit 1ます。
Pacerier、2015

@DanielVassalloありがとうございます 「INTO」という文は非常に役に立ちます。選択を返さずに選択からmysql変数を設定することを探していました。ありがとう!
ルイスアントニオ

68

クエリを括弧で囲むだけです:

set @user = 123456;
set @group = (select GROUP from USER where User = @user);
select * from USER where GROUP = @group;

この結果、Subquery returns more than 1 row私にとっては
timbroder '

1
@timbroderクエリにLIMIT 1を追加するだけです。とにかく、私はそれを修正するための編集を提案しました。
Youkko

11

最初に、mysqlで変数を定義する方法を見てみましょう

mysqlで変数を定義するには、@ {variable_name}のように '@'で始まり、この '{variable_name}'を変数名に置き換えることができます。

次に、mysqlの変数に値を割り当てる方法について説明します。このために、私たちはそれを行う多くの方法を持っています

  1. キーワード「SET」を使用します。

例:-mysql> SET @a = 1;

  1. キーワード「SET」を使用せず、「:=」を使用しない。

例:-mysql> @a:= 1;

  1. 「SELECT」ステートメントを使用する。

例:-mysql> 1を@aに選択します。

ここで@aはユーザー定義変数であり、@ aに1が割り当てられます。

ここで、@ {variable_name}の値を取得または選択する方法について説明します。

次のようなselectステートメントを使用できます

例:-

mysql> @aを選択します。

出力と@aの値が表示されます。

次に、変数のテーブルから値を割り当てる方法について説明します。

このため、次のような2つのステートメントを使用できます。

  1. @a:=(emp_id = 1の従業員からemp_nameを選択);

  2. emp_id = 1である従業員から@aにemp_nameを選択します。

emp_nameは単一の値を返す必要があるので常に注意してください。そうしないと、この型ステートメントでエラーがスローされます。

これを参照してください:-http : //www.easysolutionweb.com/sql-pl-sql/how-to-assign-a-value-in-a-variable-in-mysql


7

この方法を使用して、実行中に結果が表示されないようにします ストアドプロシージャのます。

クエリ:

SELECT a.strUserID FROM tblUsers a WHERE a.lngUserID = lngUserID LIMIT 1 INTO @strUserID;
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.