在Access数据库中,如何完成从一个结果集中除掉另一个结果集?(100分)

  • 主题发起人 主题发起人 酸橙子
  • 开始时间 开始时间

酸橙子

Unregistered / Unconfirmed
GUEST, unregistred user!
sql1:='select name,mobile,class,worth from client';
sql2:='select name,mobile,class,worth from client where class >5 and class <7';
怎样从sql1的结果集中减掉sql2的结果集?
在Access中用Exisits 好象没有作用。
 
下面是SQL SERVER带的例子,用NOT IN语句式一下
USE pubs
SELECT au_lname, au_fname
FROM authors
WHERE au_id NOT IN
(SELECT au_id
FROM titleauthor
WHERE royaltyper < 50)
 
你可以这样做,用adotable或adoquery的filter属性,对结果集中的数据作过滤。
sql.text:='select name,mobile,class,worth from client';
open;
query1.filtered:=false;
filter := class <5 or class >7;
query1.filtered:=true;
 
not in 也不能用,我想我说的不全sql2:='select * from client where class>5 and worth < 1000 ';
这时候怎么办?not in 只能用于排除一个字段。
 
就是啊,直接写sql就行了,何必分成两个query呢!
'select * from client where class<=5 and worth >= 1000
 
同意楼上
 
你是想过滤掉(不显示)这些数据还是从数据库表中将这些数据删除?
如果是前者上面几位的解答可以实现,如果是后者可以这样作:
sql:='delete from tablename where fieldname1>value1 and fieldname2<value2 '
 
我有两个查询语句,第一个是选择目标,
sql1:='select username,mobile,class,worth from client
where (worth <= 200000 and worth >= 100000) and (class <= 6 and class >= 3)'
第二个是从全集中除去已经选择的目标,现在的问题就是不知道第二个查询怎么写。如果是:
sql2:='select username,mobile,class,worth from client
where worth not in (select worth from client where worth <= 200000 and worth >= 100000) and
class not in (select class from client where class <= 6 and class >= 3)'
显然不能达到我想要的结果,因为排除的目标太多,第一个没有选择那么多。
 
应该是
delete Client where in (sql1)
大概应该是这样,好长时间没有写数据库程序了
 
对不起,我想我没有说清楚。sql2只是求sql1的补集,而不是删除sql1的记录。
我的记录是有用的,怎么能说删掉就删掉呢?
 
谢谢各位的支持!问题已经解决了。mlzhou的想法很好,可以解决。
 
接受答案了.
 

Similar threads

S
回复
0
查看
3K
SUNSTONE的Delphi笔记
S
S
回复
0
查看
2K
SUNSTONE的Delphi笔记
S
I
回复
0
查看
687
import
I
后退
顶部