设为首页收藏本站Access中国

Office中国论坛/Access中国论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

返回列表 发新帖
查看: 4160|回复: 6
打印 上一主题 下一主题

[查询] 删除查询运行之比较

[复制链接]
跳转到指定楼层
1#
发表于 2011-4-25 14:57:54 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 roych 于 2011-4-25 15:13 编辑

现在俺是采用了子查询来删除:
1、DELETE t_SysUserLogon.*
FROM t_SysUserLogon
WHERE Name Not In (select Name from tbl_E_Personal);
2、之前老汉斑竹说,应该用Dlookup来做,我稍稍改了下,用Dcount来做
DELETE  t_SysUserLogon.*
FROM t_SysUserLogon
WHERE DCount("name","tbl_e_personal","name='" & [name] & "'")=0;
经测试对比:
第一种方法运行了46'90;第二种方法运行到1:30'时,俺实在没耐性了,便关掉了已经没反应的数据库。想来第二种方法应该是逐行对比,运行了27000*714次所致的吧。
本想用右联接来做,但无法执行(见下面代码),看看大家有没有其它更好的办法?
DELETE t_SysUserLogon.*
FROM tbl_E_Personal RIGHT JOIN t_SysUserLogon ON tbl_E_Personal.Name = t_SysUserLogon.Name
WHERE tbl_E_Personal.Name Is Null

本帖被以下淘专辑推荐:

分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享分享 分享淘帖1 订阅订阅
2#
发表于 2011-4-25 15:37:22 | 只看该作者
本帖最后由 todaynew 于 2011-4-25 15:39 编辑

域函数,子查询应该都快不了。其实可以跳出这个思路,另辟蹊径。类似这样的问题,可以绕这样的圈子来处理:
1、联接两表得到有相同name的记录,将这些记录生成到一个临时表中(可用生成表查询执行之)。
2、全部删除目标表中的记录。
3、将临时表的记录追加到目标表。
4、删除临时表

这叫做:穿插迂回辟蹊径,黄泉路上且快行。上吊莫寻一个树,放眼望去是深林。
3#
 楼主| 发表于 2011-4-25 23:42:20 | 只看该作者
看样子也只能如此了。。。——微软的MSDN里好像就这么介绍的。
4#
发表于 2011-6-30 21:40:29 | 只看该作者
好思路

点击这里给我发消息

5#
发表于 2014-12-1 12:44:24 | 只看该作者
跳出思路,另辟蹊径!
6#
发表于 2015-2-25 10:07:19 | 只看该作者
{:soso_e179:}{:soso_e179:}{:soso_e179:}
7#
发表于 2016-4-26 20:48:47 | 只看该作者
高招呀
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

QQ|站长邮箱|小黑屋|手机版|Office中国/Access中国 ( 粤ICP备10043721号-1 )  

GMT+8, 2024-5-4 06:40 , Processed in 0.101689 second(s), 32 queries .

Powered by Discuz! X3.3

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表