理解 sql 中exists 子查询

来源:互联网 发布:js对url编码 编辑:程序博客网 时间:2024/05/21 19:39

最近在一个项目中有这样一个需求,在一个表A(id,num,adddate) 中 查询出adddate 时间间隔相差两秒以内的记录!最后还是到csdn上求助(http://topic.csdn.net/u/20080509/16/786bcc61-5697-4762-be17-8d4c5955c28e.html) 问题才解决,sql语句如下

--建立测试环境
set nocount on
create table test(ID varchar(20),Num varchar(20),AddDate varchar(20))
insert into test select '1','5','2008-03-10 9:26:20'
insert into test select '2','2','2008-03-10 9:26:22'
insert into test select '3','2','2008-03-10 9:28:20'
insert into test select '4','2','2008-03-15 10:26:20'
insert into test select '5','6','2008-03-15 10:26:22'
go
--测试
select * from test a
    
where exists(select 1 from test where id<>a.id 
        
and abs(datediff(s,a.AddDate,AddDate))<=2)


--删除测试环境
drop table test
 
set nocount off

/*
1    5    2008-03-10 9:26:20
2    2    2008-03-10 9:26:22
4    2    2008-03-15 10:26:20
5    6    2008-03-15 10:26:22
*/

 

 首先还感谢jinjazz 的帮助,看到这个语句,发觉自己对exists 子查询不能理解,以前对exists的使用也就是判断某个条件的记录是否存在。然后查找sql2000 帮助

 

EXISTS

指定一个子查询,检测行的存在。

语法

EXISTS subquery

参数

subquery

是一个受限的 SELECT 语句 (不允许有 COMPUTE 子句和 INTO 关键字)。有关更多信息,请参见 SELECT 中有关子查询的讨论。

结果类型

Boolean

结果值

如果子查询包含行,则返回 TRUE。

请理解的朋友帮忙解释一下!