2017-08-04 49 views
1

使用變量/函數返回值有一個命名爲顧客這樣的表:MySQL的:在選擇

| Name | Age | Balance | 
------------------------------ 
| Kevin | 25 | 150000 | 
| Bob | 33 | 350000 | 
| Anna | 27 | 200000 | 

簡單,選擇「姓名」一欄,我們可以使用:

SELECT Name FROM customer 

現在,我想通過這樣的一個變量來做到這一點:

SET @temp = 'Name' 
SELECT @temp FROM customer 

結果我得到:

| @temp | 
----------- 
| Name | 

我想要的結果是相同的,如正常選擇:

| Name | 
---------- 
| Kevin | 
| Bob | 
| Anna | 

我預計這將運行同樣喜歡「選擇的名字從客戶」,因此,它基本上由一個變量值運行SELECT 。

我也使用函數返回值來做同樣的事情,但我得到了類似的結果。例如,有函數調用的CustName(價值):

SELECT CustName(A) // Return : 'Name' 
FROM customer; 

這會給我造成:

| CustName(A) | 
----------------- 
|  Name  | 

是沒有什麼辦法,MySQL將運行「名稱」常想,當我基本上寫「選擇客戶名稱「?

+0

http://rpbouman.blogspot.co.uk/2005/11/mysql-5-prepared-statement-syntax-and.html是否會見你的目標? –

+0

你究竟在做什麼? – Strawberry

+0

@CaiusJard是的,這幾乎回答我的問題。問題是,我想放的字符串不在WHERE =?上,但SELECT? – Tan

回答

1

你說你要找的是動態sql ..它通常不是一個神話般的想法,因爲你試圖改變數據庫想要修復的查詢的一部分,出於性能原因。如果需要一個用戶名字符串,但是用戶提供了'生日'作爲要選擇的東西,並且您的客戶端獲取日期,您也將很難在客戶端應用中使用您的SQL。

如果您'地獄一心想做,這個SO帖子給出了更多的細節:How To have Dynamic SQL in MySQL Stored Procedure

我必須要求你考慮,但這是你設計的一個破碎的解決方案,以及其他一些問題。發佈其他問題可能會更好,因爲解決這個問題可能會提高效率

+0

這很好,因爲我只會用它來遷移一些數據。問題是,我想放的字符串不在WHERE =?上,但SELECT? – Tan

+0

這不是關於使用?以指定將會有所不同的事情,這是關於把sql放入一個字符串並執行它......在你想要的字符串中編譯你想要的確切的sql,並準備它,參見Stefan Rogin接受的答案的評論,例如,看Tim的答案獨奏(#2最高的答案)另一個例子..都使用CONCAT來建立SQL,它沒有太多關於?因爲它關於CONCAT :) –