2012-12-06 50 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列(S)。當我將它限制爲1列時,我得到:子查詢返回多於1行。 – 5un5

+0

是的,因爲'@ foo'只能存儲一個值。所以在你的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

謝謝 - 太多的數據,使這一個工作,但也許爲一個較小的任務。 – 5un5

+0

這將是有益的,但我仍然得到錯誤1172(42000):結果包括多個行時,當我嘗試:SELECT pid INTO @foo table1連接表2 bar = 0組由pid – 5un5

+0

嘗試group_concat函數來獲取所有行數據都在一個變量中,正如我在答案中已經定義的那樣。 –