ms-access - 如何提高子查询的性能?
问题描述
我有以下两个单独的查询:
SELECT qry_tbl_G_ov_uni_atp.ID, Max(qry_tbl_G_ov_uni_atp.nElo_Ov) AS MaxOfnElo_Ov
FROM qry_tbl_G_ov_uni_atp
GROUP BY qry_tbl_G_ov_uni_atp.ID;
和:
SELECT qry_tbl_G_ov_uni_atp.ID, Max(qry_tbl_G_ov_uni_atp.nElo_Sur) AS MaxOfnElo_Sur1
FROM qry_tbl_G_ov_uni_atp
WHERE qry_tbl_G_ov_uni_atp.ID_C = 1
GROUP BY qry_tbl_G_ov_uni_atp.ID;
两者都运行良好,在一两秒钟内。我想将它们组合成一个查询,所以我有ID
,MaxOfnElo_Ov
并且MaxOfnElo_Sur1
在同一个输出中。
我知道我需要使用子查询,但我的尝试绝对需要很长时间才能显示任何内容,然后几乎无法使用,因为任何滚动锁定的尝试都会再次访问一段时间。我显然没有做正确的事情。这是我的子查询代码:
SELECT qry_tbl_G_ov_uni_atp.ID, Max(qry_tbl_G_ov_uni_atp.nElo_Ov) AS MaxOfnElo_Ov, (SELECT Max(tt.nElo_Sur)
FROM qry_tbl_G_ov_uni_atp as tt
WHERE tt.ID_C = 1
AND tt.ID = qry_tbl_G_ov_uni_atp.ID) AS MaxOfnElo_Sur1
FROM qry_tbl_G_ov_uni_atp
GROUP BY qry_tbl_G_ov_uni_atp.ID;
解决方案
如您所指出的,您可以使用子查询来实现此目的。通过在 中使用子查询,JOIN
您将获得(您的第一个查询)的所有结果和(您的第二个查询)的a
匹配结果b
:
SELECT a.ID,
a.MaxOfnElo_Ov,
b.MaxOfnElo_Sur1
FROM (
SELECT qry_tbl_G_ov_uni_atp.ID,
Max(qry_tbl_G_ov_uni_atp.nElo_Ov) AS MaxOfnElo_Ov
FROM qry_tbl_G_ov_uni_atp
GROUP BY qry_tbl_G_ov_uni_atp.ID
) a
LEFT JOIN (
SELECT qry_tbl_G_ov_uni_atp.ID,
Max(qry_tbl_G_ov_uni_atp.nElo_Sur) AS MaxOfnElo_Sur1
FROM qry_tbl_G_ov_uni_atp
WHERE qry_tbl_G_ov_uni_atp.ID_C = 1
GROUP BY qry_tbl_G_ov_uni_atp.ID
) b ON b.ID = a.ID
请注意,这是未经测试的,并假设ID
两者a
和b
(我相信它是)相同。
推荐阅读
- node.js - 使用 Node.JS 对 SOAP 的 API 访问,脚本不起作用
- java - 使用clojure通过java互操作从数据集对象调用groupBy方法
- python - 对错误感到困惑:IndexError:列表分配索引超出范围
- android - 可视化 Android 内置 Drawable 的网页
- python - 如何修复不工作的 Tkinter 嵌套框架;它不允许小部件
- javascript - 使用 chart.js 时,自定义工具提示在渲染后立即消失
- sql - 如何将 hive 数据导出为 csv 或 txt
- isabelle - 类型变量作为语言环境
- django-static - 尽管我在 settings.py 文件中设置了静态 URL、Root、Dirs,但为 CSS 文件获取 HTTP 404
- angularjs - 使用 AngularJS 从数组中选择