2009-12-19 46 views
1

我想寫什麼應該表面上,是相對容易的SQL查詢 - 但是,我不能讓他們工作。令人難以忍受的SQL問題

是否可以編寫一個查詢,看起來像這樣:

select t.name 
    from (select * 
      from mystoredproc(1,2,3) as t) 
where t.name = 'foobar' 

兩個問題上面的查詢:

1)首先關閉所有,上述dosent工作的陳述。我的數據庫引擎(MySQL的)抱怨:

ERROR 1054(42S22):在 '字段列表'

2)我想使用返回表t未知列 't.name' 在一個自我加入。但是,我不想讓 必須再次調用mystoredproc(...) ,因爲它非常昂貴的調用。

任何人都知道如何解決這些問題?

順便說一句,即使我使用MySQL的(現在),我寧願如有遞上SQL代碼段是數據庫無關的(即ANSI SQL)

回答

11

) t更換) as t),如

select t.name from (select * from mystoredproc(1,2,3)) t where t.name = 'foobar' 

對於第二個問題:將mystoredproc的結果輸入到臨時表中,並從中輸入SELECT,然後您就可以無障礙地進行自我連接。

+0

不錯...潛在的問題,雖然這是一個網絡後端,我需要區分成功的調用。我正在考慮爲每組記錄自動生成一個密鑰,但我可能會過分複雜 - 這裏有任何想法..? – 2009-12-19 17:49:18

+1

只有在創建臨時表時纔會看到臨時表。所以,即使你有幾個併發調用,所有的CREATE TEMPORARY TABLE myTempTable,每個連接都只能訪問該表中的自己的一組數據。儘管您可能需要使用事務,否則該表可能會在查詢中消失。 – 2009-12-19 17:54:11

+0

請查閱使用說明書:http://dev.mysql.com/doc/refman/5.0/en/create-table.html – 2009-12-19 17:55:05