Office中国论坛/Access中国论坛

标题: 请教sql语句,错哪了? [打印本页]

作者: sxgaobo    时间: 2010-12-30 20:30
标题: 请教sql语句,错哪了?
DELETE 表.*, 表2.选择
FROM 表1 INNER JOIN 表2 ON 表1.编号 = 表2.编号
WHERE (((表2.选择)=-1));
作者: zyp    时间: 2010-12-30 20:40
DELETE 只能同时对一个表进行操作
作者: roych    时间: 2010-12-31 01:49
本帖最后由 roych 于 2011-8-31 20:20 编辑

应该改为子查询:
  1. DELETE 表.*, 表1.选择, 表1.编号
  2. FROM 表1
  3. WHERE (((表1.选择) In (select 表2.选择 from 表2 where 表2.选择=-1)) AND ((表1.编号) In (select 表2.编号 from 表2)));
复制代码
两个月之前我也遇到过这个问题,在这里提问居然没人回答~~汗,后来还是自己摸索出来的~~
[attach]44538[/attach]

作者: todaynew    时间: 2010-12-31 09:47
roych 发表于 2010-12-31 01:49
应该改为子查询:
两个月之前我也遇到过这个问题,在这里提问居然没人回答~~汗,后来还是自己摸索出来的~~ ...

没那么复杂吧?这样应该就可以了:
DELETE *
FROM 表1
WHERE dlookup("选择","表2","编号=" & [编号])=-1;
作者: roych    时间: 2010-12-31 09:58
todaynew 发表于 2010-12-31 09:47
没那么复杂吧?这样应该就可以了:
DELETE *
FROM 表1

HoHo,之前没想过用函数可以轻易解决,固守在字段之间。学习了……
向版主致敬!
作者: todaynew    时间: 2010-12-31 10:07
roych 发表于 2010-12-31 09:58
HoHo,之前没想过用函数可以轻易解决,固守在字段之间。学习了……
向版主致敬!

用in查询速度会很慢,特别是表2记录条数多的时候。
作者: todaynew    时间: 2010-12-31 10:16
本帖最后由 todaynew 于 2010-12-31 10:18 编辑
sxgaobo 发表于 2010-12-30 20:30
DELETE 表.*, 表2.选择
FROM 表1 INNER JOIN 表2 ON 表1.编号 = 表2.编号
WHERE (((表2.选择)=-1));


诚如ZYP同志所论,DELETE不能针对两个及以上的表进行,因此可以这样写:
DELETE 表1.*
FROM 表2 INNER JOIN 表1 ON 表2.编号=表1.编号
WHERE (((表2.选择)=-1));

三种写法以7楼效率最好,4楼次之,3楼最差。

作者: zyp    时间: 2010-12-31 11:38
todaynew 发表于 2010-12-31 10:16
诚如ZYP同志所论,DELETE不能针对两个及以上的表进行,因此可以这样写:
DELETE 表1.*
FROM 表2 INNE ...

确实是第7楼的方法最佳.
作者: sxgaobo    时间: 2010-12-31 13:47
谢谢各位的关注!知识就是这样积累的啊
作者: tz-chf    时间: 2011-1-2 21:01
7楼正解,其它都不咋地。
作者: tz-chf    时间: 2011-1-2 21:01
本帖最后由 tz-chf 于 2011-1-2 21:06 编辑

可能是受到楼主误导,应该写清楚你想要干什么。

作者: 522650696    时间: 2016-4-26 20:33
学习了




欢迎光临 Office中国论坛/Access中国论坛 (http://www.office-cn.net/) Powered by Discuz! X3.3