Ms access 如何提高子查询的性能?

Ms access 如何提高子查询的性能?,ms-access,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; 以及: 两者都运行良好,在一两秒钟内。我想将它们合并到一个查询中,以便在相同的输出中有ID、MaxOfnElo\u Ov和MaxOfnElo\u Sur1 我知道我需要使用子查询,但我的尝试需要

我有以下两个问题:

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;
以及:

两者都运行良好,在一两秒钟内。我想将它们合并到一个查询中,以便在相同的输出中有
ID
MaxOfnElo\u Ov
MaxOfnElo\u 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;

正如您所指出的,您可以使用子查询来实现这一点。通过使用
连接中的子查询
,您将从
a
(您的第一个查询)获得所有结果,并从
b
(您的第二个查询)获得匹配结果:

注意,这是未经测试的,并且假设
a
b
中的
ID
是相同的(我相信是这样)

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;
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