2012-01-03 102 views
1

我有一個大的Access數據庫,我正在研究,由別人設計。我正在嘗試改進它。它的建立方式是,首先運行使表A生效的查詢1,然後運行使用表A等的查詢2,並創建表B.然後運行使用表B並生成表C的查詢3。運行查詢4,它使用表C並生成表D.我們使用的最終輸出是表D.MS Access 2007 - 查詢裏面查詢裏面查詢裏面查詢

這裏我的改進是將查詢1,查詢2和查詢3更改爲選擇查詢,而不是使表查詢,並簡單地通過查找和替換來更改SQL(例如,在查詢2中,將表A的所有實例替換爲查詢1)。查詢4仍然是一個生成表查詢,它使表D我稍後導出到Excel。

我的問題:我可以運行Query 4嗎?也就是說,它會自動運行Query 3,它將自動運行Query 2,它將自動運行Query 1?或者,是否需要先運行查詢1,然後運行查詢2,然後運行查詢3,然後運行查詢4?

也許除此之外,我可以使查詢4一個選擇查詢嗎?然後,我甚至不會運行查詢4.相反,我只是將Query 4本身導出到Excel,我想知道是否會自動運行將運行Query 3的Query 4,依此類推。

只是要清楚:我不在這裏尋找任何SQL技巧。我想保留它現在只使用Access(我知道它是SQL的前端)。

注:我意識到這裏的一個答案是,「你爲什麼不嘗試它?」我有,它似乎工作,因爲我認爲應該。問題是,之前我已經運行過所有查詢,所以我不知道是否現在所有的工作都可以工作,但如果我還沒有運行先前的查詢,那麼以後可能不會以相同的方式工作。

感謝所有幫助

+2

爲什麼不直接向最終用戶提供在VBA中以正確順序執行查詢的表單上的按鈕,然後將最終結果顯示爲表或報表?特別是在你的情況下,查詢的順序對最終輸出至關重要。 – 2012-01-03 14:24:40

+0

@WilliamStearns我是最終用戶。你的答案絕對是一個好主意。但是,這與我學習Access的工作原理一樣,因爲它讓這個項目能夠工作。 – Graphth 2012-01-03 14:27:49

+0

好吧,您可以在Query 4上更改您的SQL,將其他查詢的SQL作爲表名添加到您的連接中。有了這個,你不需要將其他查詢作爲真正的表。 – 2012-01-03 14:35:59

回答

1

正如Olivier已經提到的,是的,從SELECT查詢中選擇按照您的預期工作。實際上,你可以通過一個模塊中創建這個函數

Function LogQueryCall(ByVal query As String) 

    Debug.Print query & " " & Now 

End Function 

的然後從查詢調用它例如,測試這

查詢1

SELECT *, LogQueryCall("Query1") FROM Table1 ; 

QUERY2

SELECT *, LogQueryCall("Query2") 
    FROM Query1 
    INNER JOIN Table2 
    ON Query1.Field = table2.Field 

QUERY3

SELECT *, LogQueryCall("Query3") FROM Query2 

然後你就會看到在立即窗口

Query1 01/03/2012 5:54:46 PM 
Query2 01/03/2012 5:54:46 PM 
Query3 01/03/2012 5:54:46 PM 
結果

注意功能將只被調用一次每個查詢不是每行一次

另一個選項是創建1個大查詢。這會像使用from子句那樣使用每個查詢的內容。

SELECT * 
FROM  
    (Select * FROM Table1) A 
    INNER JOIN Table2 
    ON a.Field = table2.Field 
1

簡短的回答是:「是的,你可以嵌套SELECT查詢,並只需僅僅出口最外層查詢結果導出到Excel」。

查詢在很多情況下可以像表格一樣使用。嵌套查詢將執行自己的SELECT語句,並將其結果傳遞給周圍的查詢,就像它是一個表一樣。

如果QUERY2調用QUERY1和
QUERY3調用QUERY2和
qyery4調用QUERY3
......那麼查詢將自動在順序執行通過將他們的結果,當你執行query4下一個查詢如下圖所示:

表 - > QUERY1 - > QUERY2 - > QUERY3 - > query4

我假設你的查詢看起來像這樣:

query1: SELECT * FROM table; 
query2: SELECT * FROM query1; 
query3: SELECT * FROM query2; 
query4: SELECT * FROM query3;