我有以下SQL查询
SELECT
pmma_vt_feldmarkposition.vtvt_recn AS [li_verträge_recn],
pmma_vt_feldmarkposition.feldmark AS [vt_feldmark_nr_pflanze],
switch (gbs is null, gbs_opti, gbs is not null, gbs) AS [ta_istbeitragssatz_hagel],
NZ(pmma_vt_feldmarkposition.ebs_sturm, 0) + NZ(pmma_vt_feldmarkposition.ebs_frost, 0) + NZ(pmma_vt_feldmarkposition.ebs_wolkenbruch, 0) + NZ(pmma_vt_feldmarkposition.ebs_hochwasser, 0) + NZ(pmma_vt_feldmarkposition.ebs_trockenheit, 0) + NZ(pmma_vt_feldmarkposition.ebs_pauschal, 0) AS [ta_istbeitragssatz_elementar],
switch (gbs is null, gbs_opti, gbs is not null, soll_gbs) AS [ta_sollbeitragssatz_hagel]
INTO
vrt_feldmarkpositionen
FROM
PMMA_VT_FELDMARKPOSITION
WHERE
pmma_vt_feldmarkposition.lfd_nr * 1000000000 + pmma_vt_feldmarkposition.vtvt_recn
IN (
SELECT MIN(pmma_vt_feldmarkposition.lfd_nr * 1000000000 + pmma_vt_feldmarkposition.vtvt_recn) AS minhelper
FROM pmma_vt_feldmarkposition
GROUP BY pmma_vt_feldmarkposition.vtvt_recn
);
pmma_vt_feldmarkposition
曾经链接到我的ODBC数据库,并且查询运行没有问题。现在,我将链接转换为本地表(也称为pmma_vt_feldmarkposition
,删除了指向数据库的链接)以便能够脱机工作 - 但查询会一直运行而不会完成。我没有收到任何错误消息。
这可能是什么原因?可能是因为我的.accdb
文件现在大了1,8GB吗? (我保存了一些本地表并已使用" compact和repair"功能)
答案 0 :(得分:1)
实际上,我认为最好的解决方案是摆脱计算的表达式,而是在JOIN中使用这两个字段。
简化查询的第一部分,这将是:
SELECT
fields
FROM
PMMA_VT_FELDMARKPOSITION T
INNER JOIN (
SELECT MIN(lfd_nr) AS MinLfdNr, vtvt_recn
FROM pmma_vt_feldmarkposition
GROUP BY vtvt_recn
) AS MinGrp
ON T.lfd_nr = MinGrp.MinLfdNr
AND T.vtvt_recn = MinGrp.vtvt_recn
至少我认为这应该返回与查询相同的结果。
如果需要,可以通过将子查询结果存储在临时表中来进一步提高性能。
确保将lfd_nr
和vtvt_recn
都编入索引。