access中求两表差集问题

1)ACCESS数据库查询对象,一次只允许运行一条SQL语句,而题主的查询截图里有两条SQL语句,这样自然就会报错。

2)删除B表中与A表中字段ID相同的记录,请参考下列SQL语句:

1
2
delete  from  where  exists 
( select  from  from  where  A.ID=B.ID);

3)求A表中与B表的差集(非交集)

写法一, 利用非存在子句进行判断筛选

1
2
select  from  where  not  exists 
( select  from  where  B.ID=A.ID)

写法二 ,利用左连接出现的空值进行判断筛选(这里假设两表的字段ID都是唯一的,否则B表得实施去除重复项操作)

1
select  A.*  from  left  join  on  A.ID=B.ID  where  B.ID  is  null ;

注意:

写法一,在ID字段有索引的情况下运行效率很高,可作为首选使用,但是如果没有索引可利用的话,在大数据表的情况下运行效率很渣,应避免使用,这时推荐所使用写法二。

写法二 ,在有索引的情况下运行速度要比写法一慢。但是在没索引可利用时,碰到大数据表,其运行效率要比写法一好很多。

 
追问
1 小时前

抱歉因为我真的没任何基础 还想确认一下 我求B-A 也就是图中红色的部分 字段没有索引 直接输入你给的3)中的写法二就可以是吗 麻烦您了

 
追答
29 分钟前
那就得A、B表反过来写,也就是求B表中与A表的非交集。
select B.* from B left join A on B.ID=A.ID where A.ID is null;
如果表名和字段名与实际不一致,上述语句中的表名和字段名换成实际的名字就可以了。
直接在access查询向导中做就可以了

 

 
   

转载于:https://www.cnblogs.com/xiaobaohuizi/p/8871157.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值