mysqlを使用してクエリ結果を変数に保存する方法


92
SET @v1 := SELECT COUNT(*) FROM user_rating;
SELECT @v1

set変数を使用してこのクエリを実行すると、このエラーが表示されます。

Error Code : 1064
You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use
near 'SELECT count(*) FROM user_rating' at line 1

Execution Time : 00:00:00:000
Transfer Time  : 00:00:00:000
Total Time     : 00:00:00:000

(1 row(s) returned)
Execution Time : 00:00:00:343
Transfer Time  : 00:00:00:000
Total Time     : 00:00:00:343

回答:


148

その選択を括弧で囲みます。

SET @v1 := (SELECT COUNT(*) FROM user_rating);
SELECT @v1;

12
そのサブクエリには、1行1列だけを含める必要がありますか?1. #1242 - Subquery returns more than 1 row 、2。#1241 - Operand should contain 1 column(s)
Shafizadeh

1
@RajatGupta:どこで実行していますか?そして、「機能しない」と定義します。
Sergio Tulentsev 2017年

2
@Shafizadeh:はい、そのサブクエリは1つの行と列のみを返す必要があります
Sergio Tulentsev 2017年

phpmyadminmysqlで試してみました。「新しい命令が見つかりましたが、前の命令との間に区切り文字がありません」というエラーが表示されます(ドイツ語から翻訳)。
ブラック

1
戻り値は値のリストではなく1でなければならないようです
Victor S

35

さらに、1つのクエリで一度に複数の変数を設定する場合は、次のように変数を設定するために他の構文を使用できます。 SELECT @varname:=value

実用的な例:

SELECT @total_count:=COUNT(*), @total_price:=SUM(quantity*price) FROM items ...

8

これを使って

 SELECT weight INTO @x FROM p_status where tcount=['value'] LIMIT 1;

テストされ、正常に動作します...


[]このステートメントで角かっこはどういう意味ですか?
アミン2016

単なるプレースホルダースキップ[]であり、値を一重引用符で囲むだけです
Aman Maurya

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