2012-12-06 40 views
9

大きなmysqlデータベースに対して読み取り権限のみを照会していますが、いくつかの低速クエリ結果を変数 'foo'に設定したいので、別のクエリで再度使用できます。MySQL変数にクエリ結果を代入

基本的に、厄介なサブクエリの変数を使用したいので、使用するたびに実行するコストをかけずに再利用できます。

私は次のように入力します

set @foo := (select * 
      from table1 join table2 
      where bar = 0 
      group by id); 

私が手:ERROR 1241(21000):オペランドは、1列(S) が含まれている必要があり、私は1列、ERROR 1242(21000)に制限する場合:サブクエリは複数を返します。 1行より

変数に配列やテーブルを格納する方法はありますか?一時テーブルを作成する権限がありません。

答えて

4

MySQLの場合は@にする必要があります。

set @foo := (select * 
      from table1 join table2 
      where bar = 0 
      group by id); 
+0

おかげで、今私が得る:ERROR 1241(21000):オペランドは、1列(複数可)を含める必要があります。私は1列に制限すると、私は取得:サブクエリは1行以上を返します。 '@ foo'は1つの値しか格納できないので、 – 5un5

+0

です。したがって、あなたの 'SELECT'ステートメントでは、それが単一の値を返すことを間違いなく知っているはずです。 –

+0

ああ、そうです。ありがとう。変数をクエリ結果のテーブルまたはリース配列の価値を格納する方法はありますか? – 5un5

1

また、これを試すことができます。

あなたはどの変数に完全なテーブルを保存するカントしかし、あなたは、クエリの下に使用して、任意の変数の列のデータを保存することができます。

SELECT GROUP_CONCAT(col1 SEPARATOR '~~~'), GROUP_CONCAT(col2 SEPARATOR '~~~'), ... INTO @foo, @foo2, ... 
FROM table1 JOIN table2 
WHERE bar = 0 
GROUP BY id; 

または

select col1, col2, ... into @foo, @foo2, ... 
from table1 join table2 
where bar = 0 
group by id 
+0

ありがとう - この1つの作業を行うにはあまりにも多くのデータ、しかし多分小さな仕事のために。 – 5un5

+0

私はそれを試してみると、複数の行で構成されたエラー1172(42000):結果が表示されます。SELECT pid INTO @foo table1 join table 2 bar = 0 group by pid – 5un5

+0

取得するgroup_concat関数を試してください私の答えで既に定義したように、1つの変数のすべての行データ。 –

関連する問題