理解 sql 中exists 子查询

最近在一个项目中有这样一个需求,在一个表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。

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



 

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值