您的位置:首页 > 数据库 > Oracle

oracle <>

2017-10-30 19:16 113 查看
场景:数据库中两个表 表1  表2

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

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

3 . 查询sysdate-表1中时间>30且sysdate-表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;

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

若有错误、不全、可优化的点,欢迎纠正与补充!
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  oracle 不等于