我有這樣的MS Access查詢:(30秒)MS Access查詢很慢
SELECT t1.sb, suchbegriff2, menge
FROM (SELECT artnr & '/' & [lfdnr-kal] AS sb, left(suchbegriff,7) &
val(right(suchbegriff,4)) AS suchbegriff2
FROM kvks
WHERE suchbegriff like '*/*') AS t1
INNER JOIN (SELECT artnr & '/' & [lfdnr-kal] AS sb,
[artnr-hz] & '/' & val(lfdnr) AS hz, menge
FROM konf
WHERE [artnr-hz]<>'') AS t2
ON (t1.sb=t2.sb) AND (t1.suchbegriff2=t2.hz);
它運行真的很慢。我想通了,這是因爲inner join
部分。如果我離開這個,速度是正確的。
也許是因爲事實緩慢,連接的字段是計算表達式?
編輯:
我修改的基礎上Smandoli的答案查詢:
SELECT kvks.artnr & '/' & kvks.[lfdnr-kal] AS sb,
left(suchbegriff,7) & val(right(suchbegriff,4)) AS suchbegriff2,
konf.menge
FROM kvks, konf
WHERE kvks.suchbegriff like '*/*'
and konf.[artnr-hz]<>''
and kvks.artnr=konf.artnr
and kvks.[lfdnr-kal]=konf.[lfdnr-kal]
and left(suchbegriff,7) & val(right(suchbegriff,4))=[artnr-hz] & '/' & val(lfdnr)
它運行現在是正確的。
感謝您的貢獻。
如果您的意思是像SQL Server中的臨時表,我相信MS Access你必須使用真正的表。爲了使它們工作,你必須運行連續的例程,通常使用VBA;你不能像在你習慣的時候那樣只是在棧中啓動一組程序。 – Smandoli
是的,您可以從原始表中創建臨時表,但需要運行VBA以刷新該數據。有關更多信息,請參閱https://accessexperts.com/blog/2011/07/20/use-temp-tables-in-your-code-for-quick-and-easy-analysis/ – Nandish