2012-01-03 13 views
1

私は、他の誰かが設計した大きなAccessデータベースを持っています。私はそれを改善しようとしています。それが設定された方法は、最初にテーブル1を作成するクエリ1を実行し、次にテーブルAを使用したクエリ2を実行してテーブルBを作成します。その後、テーブルBを使用してテーブルCを作成するクエリ3を実行します。テーブルCを使用してテーブルDを作成するクエリ4を実行します。MS Access 2007 - クエリ内のクエリ内のクエリ内のクエリ

私の改善は、テーブルクエリを作成する代わりにクエリ1、クエリ2、クエリ3を選択クエリに変更することでした検索と置換(たとえば、クエリ2では、テーブルAのすべてのインスタンスをクエリ1に置き換える)だけでSQLを変更します。クエリ4は依然としてテーブル作成クエリであり、後でExcelにエクスポートするテーブルDを作成します。

私の質問:クエリ4を実行するだけですか?つまり、クエリ3を自動的に実行し、自動的にクエリ2が実行され、クエリ1が自動的に実行されますか?または、まずクエリ1を実行してからクエリ2を実行し、クエリ3を実行してからクエリ4を実行する必要がありますか?

おそらくそれを超えると、クエリ4 aも選択クエリを作成できますか?クエリ4を実行するのではなく、クエリー4自体をExcelにエクスポートするだけで、クエリ3を実行するクエリ4などが自動的に実行されるかどうかは疑問です。

私はここでSQLのヒントを探しているわけではありません。私はAccess(これはSQLのフロントエンドですが、私は知っています)を今のところ使用しています。

注:ここでの回答は、「どうしてあなたはそれを試してみませんか?」ということです。私は持っていると私はそれがすべきだと思うように動作するようです。問題は、前に何度もすべてのクエリを実行しているので、それが今のところうまくいくかどうかはわかりませんが、以前のクエリを実行していない場合は後で同じ方法ではうまく動作しません。短い答えは任意のヘルプ

+2

VBAで正しい順序でクエリを実行するフォームにエンドユーザーにボタンを渡すだけでは、最終結果が表またはレポートとして表示されません。特に、クエリの順序が最終的な出力に重要な場合には、 –

+0

@WilliamStearns私はエンドユーザーです。あなたの答えは間違いなく良い考えです。しかし、これは、この1つのプロジェクトが動作するようにAccessがどのように機能するかを学ぶことと同じくらいです。 – Graphth

+0

さて、クエリ4でSQLを変更して、他のクエリのSQLをテーブルのエイリアスとして結合に含めることができます。これにより、他のクエリを実表として持つ必要はありません。 –

答えて

1

Olivierがすでに述べたように、SELECTクエリから選択することは、期待通りに機能します。モジュールでこの関数を作成することで実際にテストできます。

Function LogQueryCall(ByVal query As String) 

    Debug.Print query & " " & Now 

End Function 

Query1を

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回だけ呼び出されることに注意してください。

もう1つのオプションは1つの大きなクエリを作成することです。これは、from節の各クエリの内容を使用します。

1

ため

おかげで、「はい、あなたは巣のクエリを選択して、ただ単に最も外側のクエリ結果をエクスポートすることにより、Excelにエクスポートすることができます」。

クエリは、多くの状況でテーブルとまったく同じように使用できます。ネストされたクエリは、独自のSELECT文を実行し、その結果を周囲のクエリに渡します。

QUERY2がquery3
を呼び出しqyery4 QUERY2と
を呼び出しquery3 Query1をして
を呼び出した場合は...その後、クエリが自動的にquery4を実行するときに、次のクエリにその結果を渡すことによって、以下に示す順序で実行されます。

テーブル - > Query1を - > QUERY2 - > query3 - > query4

私はあなたのクエリは、このような何かを見ているとします

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