首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >快速查询Access表的方法

快速查询Access表的方法
EN

Stack Overflow用户
提问于 2017-07-06 22:15:43
回答 4查看 44关注 0票数 1

我有两个访问表,A和B:

代码语言:javascript
复制
Table A
Identifier BenefitBase    PlanNav   
1        131368.46      131368.46       
2        201768.8       201768.79
3        54057.46       54057.46    
4        7397.51        7397.51 
5        9931.4         9931.4  
6        178200         178200  
Table B
p      ValidityDate LockInAmount
1      2016-4       3.82
2      2016-4       19.97
3      2016-4       26.85
4      2016-6       34.95

我只想创建一个从表A中找不到"p“ID的B中提取记录的查询。我当前的代码是:

代码语言:javascript
复制
SELECT B.p, B.ValidityDate, B.LockInAmount
FROM B
WHERE (((B.p) Not In (select Identifier from A)));

现在对我来说,这段代码应该可以很好地工作。但是,由于表非常大(B由486,000行组成(“p”在此表中重复表示不同的日期),而A由大约19,000行组成),每当我运行查询时,access都会填满查询进度条,但在接近满时会冻结。

有没有其他方法可以做到这一点?

谢谢

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2017-07-06 22:50:27

您还可以使用左连接来执行与Gustav相同的操作。它对我来说更容易阅读,我相信它将按照相同的执行计划运行。

代码语言:javascript
复制
select B.p, B.ValididtyDate, B.LockInAmount
from B
left join A on B.P = A.Identifier
where A.Identifier is null

再加上上面Erik推荐的索引。(也就是说,如果P和Identifier是表上的主键,那么它们已经被索引了,您不需要添加索引)

票数 2
EN

Stack Overflow用户

发布于 2017-07-06 22:45:30

由于您不知道字段是否已被索引:为两个字段创建索引(有关索引的信息,请参阅this page by Microsoft ):

执行这些查询以创建索引(或使用GUI)

代码语言:javascript
复制
CREATE INDEX TblAIdentifier ON A(Identifier)

CREATE INDEX TblBP ON B(p)

只要您至少创建了第一个索引,Access甚至不需要打开表A。它可以只在索引中查看哪些字段被采用。

您可以将此答案与@Gustav提供的答案一起使用

票数 2
EN

Stack Overflow用户

发布于 2017-07-06 22:40:55

你可以“反向”查找--首先找到那些匹配的,然后从表B中排除它们:

代码语言:javascript
复制
Select B.*
From B
Where B.ID Not In
    (Select A.Id
    From A, B
    Where A.ID = B.ID)
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/44951468

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档