当我创建一个与访问中的其他查询一起使用的查询时,幕后发生了啥?

Posted

技术标签:

【中文标题】当我创建一个与访问中的其他查询一起使用的查询时,幕后发生了啥?【英文标题】:What is going on behind the scenes when I create a query that works with other queries in access?当我创建一个与访问中的其他查询一起使用的查询时,幕后发生了什么? 【发布时间】:2011-04-18 17:11:54 【问题描述】:

如果我在 Microsoft Access 中有几个查询,然后在另一个新查询中使用,访问是否独立运行每个包含的查询,然后将这些结果用作新查询中的新表,或者它是否尝试将所有子查询合并到一个新的单个查询中?

例如,假设我有一个返回teacherID 和teacherName 的查询,然后我有另一个返回studentID、teacherID 和studentName 的查询。然后我尝试在一个新查询中同时使用这两个查询,该查询执行类似

的操作
SELECT qryTeacher.teacherName, qryStudent.studentName 
FROM qryTeacher INNER JOIN qryStudent 
WHERE qryStudent.teacherID=qryTeacher.teacherID;

这会执行 qryTeacher 查询和 qryStudent 查询,然后对结果运行此查询,还是会尝试使用所有三个查询构建一些新查询?

另外,源是链接的 SQL 表还是访问 .mdb 源是否重要?

【问题讨论】:

【参考方案1】:

如果您想了解数据库引擎如何处理您的查询的详细信息,请在网上搜索“Jet ShowPlan”。

“幕后”这一切都变得相当复杂。即使是相同的查询也可能不会以相同的方式连续执行两次。例如,使用新更新的索引统计信息,查询规划器可以确定更有效的路径来检索请求的数据。

更直接地指向您的问题...如果您创建一个从其他两个查询中提取数据的查询,请不要假设这两个查询在合并或馈送到第三个查询之前单独执行。它可能会以这种方式发生。但优化器会对其认为最有效的数据检索方式做出判断,并根据需要重新组织查询计划。

【讨论】:

以上是关于当我创建一个与访问中的其他查询一起使用的查询时,幕后发生了啥?的主要内容,如果未能解决你的问题,请参考以下文章

Oracle 存储过程访问其他模式

Angular2 中的 ViewChildren 装饰器可以与接口一起使用吗?

无法深入访问字段多个子查询

带有连接的访问​​查询将复选框返回为空值

相关子查询如何与 Exists 运算符一起使用?

在报表中显示访问查询结果