我一直在关系数据库上进行在线课程,并创建了一个Access数据库(第一次)来练习我的SQL查询并解决一些与工作相关的问题。该数据库由三个表组成,主表用于记录分支/商店/菜单项级别的公司范围的销售摘要信息(例如最低级别的详细信息),以及三个数据周期,数据库目前为1.3GB一个表包含4,262,421条记录。
在我尝试运行以下查询之前,一切都进展顺利:
SELECT P1.*, P13.[Price?] AS P13Price
FROM (SELECT * FROM PBASE WHERE Period = 13) AS P13, (SELECT * FROM PBASE WHERE Period = 1) AS P1
WHERE P1.Key = P13.Key and P1.[Price?]<>P13.[Price?];
为了解释,大表是PriceAccData,所以我首先运行了一个查询(PBASE),它向PriceAccData添加了一个字段,我可以将其作为一个键来比较一个时期到下一个时期的价格变化(分支的组合,商店,菜单项)。然后我使用子查询从2013年的最后一个时期(第13期)和2014年的第一个时期(第1期)创建数据集....从那里我试图识别价格从一个时期变为在Where子句中的下一个。
是否有更有效的方法来编写查询或完成比较....它一次可以用于一个分支,但是如果我为多个分支运行它,则需要很长时间并锁定Access 。
答案 0 :(得分:1)
总是知道子查询效率低下并且被用作最后的手段。通常有一种JOIN表的方法可以提高效率。我建议采用以下方式:
SELECT ...... FROM PBASE P13 INNER JOIN PBASE P1 ON P13.KEY=P1.KEY
这将为您提供2个时期的数据,然后您可以检查您的平等标准。如果您需要进一步的帮助,请告诉我