oracle <>

来源:互联网 发布:淘宝账号注销不了 编辑:程序博客网 时间:2024/06/03 03:31

场景:数据库中两个表 表1  2

1 . 其中表2是表1的一个附属表;

2 . 两个表中各有一个生成时间,1中时间不变,2中修改用户信息时会变;

3 . 查询sysdate-1中时间>30sysdate-2中时间>30的用户会员号;

语句1

SELECT A.会员号

  FROM 

(SELECT t.*FROM 1 twhere SYSDATE - TO_DATE(1.时间,'yyyyMMddHH24MISS') >30) A,

(SELECT t2.会员号 1 t2,2 t1 WHERE 1.会员号=2.会员号AND SYSDATE -1.时间>30 AND SYSDATE -2.时间<30) C

  WHERE

   A.会员号 <> C.会员号;

 

A中语句过滤出了10条数据,C中过滤出2条数据,不看结果,分析应该是得到8条结果;

实际上得到18条数据,DISTINCT 后发现是10条数据,分析是临时表A与临时表C做过滤时对比了两遍,一次少一条<>的数据,查询得到的结果为A的数据条数X C的数据条数-C的数据条数;

 

修正后语句:

SELECT A.会员号

  FROM 

(SELECT t.*FROM 1 twhere SYSDATE - TO_DATE(1.时间,'yyyyMMddHH24MISS') >30) A

  WHERE A.会员号NOT IN

(SELECT t2.会员号 1 t2,2 t1 WHERE 1.会员号=2.会员号AND SYSDATE -1.时间>30 AND SYSDATE -2.时间<30);

 

由上得出<>号只适用于单个数据;

注:<> NOT IN 会过滤null

希望对你有帮助,祝你有一个好心情,加油!

若有错误、不全、可优化的点,欢迎纠正与补充!

原创粉丝点击