Chr*_*isG 3 sql ms-access ms-access-2010
我的最终目标...... SELECT所有领域都来自qry1家庭电话,手机或工作电话匹配的行tbl2
这是我当前的SQL语法"失败".失败我的意思是它在10-15分钟后没有完成执行,而个人加入每个(独立)运行一两分钟.
SELECT qry1.*
FROM qry1 INNER JOIN tbl2
ON ((qry1.CellPhone = tbl2.CellPhone)
OR (qry1.HomePhone = tbl2.HomePhone)
OR (qry1.WorkPhone = tbl2.WorkPhone));
问题:我的SQL语法中是否存在错误?有没有更好的方法来完成我的任务?如果只是简单地运行3(Home,work,cell)JOIN查询,UNION它们,然后在必要时进行重复数据删除,对我来说更有意义吗?
如果个体加入快速工作,则复合OR条件可能很慢,因为它不能使用单个索引,而各个条件可以分别使用单个索引用于三个连接条件.因为它不能使用一个索引,所以它可能正在进行非索引的顺序表扫描.(您应该研究查询计划,以便了解优化程序实际执行的操作.)
因此,鉴于单个查询的工作速度相当快,使用UNION可以获得更好的性能(除非DBMS中的优化器有盲点):
SELECT qry1.* FROM qry1 INNER JOIN tbl2 ON qry1.CellPhone = tbl2.CellPhone
UNION
SELECT qry1.* FROM qry1 INNER JOIN tbl2 ON qry1.HomePhone = tbl2.HomePhone
UNION
SELECT qry1.* FROM qry1 INNER JOIN tbl2 ON qry1.WorkPhone = tbl2.WorkPhone
Run Code Online (Sandbox Code Playgroud)
这应该给你一个大约与3个单独查询一样快的结果.它不会那么快,因为UNION会重复消除(当然,个别查询不会消除).您可以使用UNION ALL,但如果两个表中有多个行,其中2个或3个字段对匹配,则可能导致结果中出现大量重复.