Ms access MS Access 2007-内部查询内部查询查询内部查询

Ms access MS Access 2007-内部查询内部查询查询内部查询,ms-access,Ms Access,我有一个很大的Access数据库,是由别人设计的。我正在努力改进它。按照设置方式,首先运行查询1,生成表A。然后运行查询2,使用表A和其他表,生成表B。然后运行查询3,使用表B和表C。然后运行查询4,使用表C和表D。我们使用的最终输出是表D 我在这里的改进是将查询1、查询2和查询3更改为选择查询,而不是进行表查询,并简单地通过查找和替换来更改SQL。例如,在查询2中,将表A的所有实例替换为查询1。查询4仍然是一个生成表的查询,它生成表D,稍后我将其导出到Excel 我的问题:我可以运行查询4吗?

我有一个很大的Access数据库,是由别人设计的。我正在努力改进它。按照设置方式,首先运行查询1,生成表A。然后运行查询2,使用表A和其他表,生成表B。然后运行查询3,使用表B和表C。然后运行查询4,使用表C和表D。我们使用的最终输出是表D

我在这里的改进是将查询1、查询2和查询3更改为选择查询,而不是进行表查询,并简单地通过查找和替换来更改SQL。例如,在查询2中,将表A的所有实例替换为查询1。查询4仍然是一个生成表的查询,它生成表D,稍后我将其导出到Excel

我的问题:我可以运行查询4吗?也就是说,它会自动运行查询3吗?它会自动运行查询2吗?它会自动运行查询1吗?或者,我需要先运行查询1,然后运行查询2,然后运行查询3,然后运行查询4吗

也许除此之外,我还可以将查询4设置为选择查询吗?然后,我甚至不会运行查询4。相反,我只是将查询4本身导出到Excel,我想知道这是否会自动运行查询4,而查询4将运行查询3,依此类推

我只是想说清楚:我在这里没有寻找任何SQL技巧。我只想使用Access来保存它,Access是SQL的前端,我现在知道了

注意:我意识到这里有一个答案,为什么不试试呢?我有,而且它似乎按照我认为应该的方式工作。问题是,我之前已经多次运行所有查询,所以我不知道现在是否一切正常,但如果我没有运行之前的查询,以后可能不会以同样的方式工作


感谢您的帮助

简而言之,是的,您可以嵌套SELECT查询,只需导出最外层的查询结果即可导出到Excel

在许多情况下,查询可以像表一样使用。嵌套查询将执行自己的SELECT语句,并将其结果传递给周围的查询,就像它是一个表一样

如果查询2调用查询1和 query3调用query2和 qyery4调用query3 ... 然后,在执行查询4时,通过将查询结果传递给下一个查询,查询将自动按如下所示的顺序执行:

表->查询1->查询2->查询3->查询4

我假设您的查询如下所示:

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

正如Olivier已经提到的,从SELECT查询中选择yes正如您所期望的那样工作。实际上,您可以通过在模块中创建此函数来测试这一点

Function LogQueryCall(ByVal query As String)

    Debug.Print query & " " & Now

End Function
然后从您的查询中调用它

问题1

   SELECT *, LogQueryCall("Query1") FROM Table1 ;
问题2

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

  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
注意:该函数在每个查询中只被调用一次,而不是每行调用一次

另一个选项是创建一个大查询。这将使用from子句中每个查询的内容,如下所示

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

为什么不在窗体上给最终用户一个按钮,在VBA中按正确的顺序执行查询,然后将最终结果显示为表或报表?特别是在您的情况下,查询的顺序对最终输出至关重要。@williamsterns我是最终用户。你的答案绝对是个好主意。但是,这与我学习Access的工作原理一样,也是为了让这一个项目正常工作。好的,您可以在查询4中更改SQL,将其他查询的SQL作为表别名包含在联接中。这样,您就不需要将其他查询作为实际表。如果查询4引用各种其他select查询,则打开查询4将运行其他select查询。如果这是关于学习,我认为最好的学习方法之一就是尝试。如果您的SQL有问题,您需要发布SQL。@Remou这就是为什么我在我的问题中特别提到我已经尝试过它,并解释了为什么我会这样问:我还在更改一个起始表中的一些数据,然后只运行Query 4,查看数据是否更新。在我看来是这样的。你还说应该这样做。这种组合让我感到很舒服,因为这种方式应该有效。