2016-01-21 35 views
2

實質上,我們有時(?)需要提供對錶的引用,即使我不需要它。例如。 Query input must contain atleast one table or query「查詢輸入必須包含至少一個表或查詢」錯誤 - 嵌套查詢,MS Access

我的問題是爲什麼查詢q1「SELECT 1」執行得很好,並給出了1行1列作爲值的結果表,但查詢q2「SELECT * FROM q1」產生上述錯誤?當我將q1更改爲「從dummy_table選擇1」,其中dummy_table是具有虛擬值的虛擬表,q2運行良好。

爲什麼q1的內部結構與q2有什麼關係? Q1本身的作品很好。是否q2「展開」q1,然後編譯語句 「SELECT * FROM(SELECT 1)」(它自己產生相同的錯誤)。我能以某種方式迫使Access不要窺探父母的內部結構嗎? 也爲什麼「SELECT * FROM(SELECT 1)」給出錯誤和「SELECT 1」工作正常?

回答

1

當「裸」SELECT單獨使用時,訪問將只接受沒有FROM子句的查詢,而不是另一個查詢的一部分。

正如您發現的,SELECT 1在整個聲明中有效。但是訪問抱怨「查詢輸入必須包含至少一個表或查詢」如果您嘗試使用「裸」 SELECT在另一個查詢單獨使用時,如SELECT q.* FROM (SELECT 1) AS q;

同樣,儘管SELECT 1SELECT 2都有效,試圖UNION他們觸發了同樣的錯誤:

SELECT 1 
UNION ALL 
SELECT 2 

有沒有辦法來規避這個錯誤。正如您還發現的那樣,將「裸體」SELECT另存爲命名查詢,然後在另一個命名查詢中使用命名查詢仍會觸發該錯誤。這只是Access數據庫引擎的一個侷限性,並且在我使用的每個Access版本(> = Access 2000)中都是如此。

+0

謝謝你的回答。但爲什麼?這是什麼原因?它允許一些執行時間優化? – zaptask

+0

我真的不知道爲什麼的答案。我懷疑單獨使用裸SELECT的支持相對容易實現。但是,將裸SELECT作爲另一個查詢的一部分來支持查詢語法分析器設計需要額外的額外開發工作,而MS認爲這是不值得的。但這只是猜測。你可能需要問MS。 – HansUp