where exists (select 1 from 中null=null时遇到的实际问题

数据
--------------------------------(数据A中FLDCPH是没有数据的就是空)
ID   FLDCPH                    STARTTIME
A                              2015-11-06 15:42:52
B        OXA                   2015-11-05 11:26:30
---------------------------------
查询语句
select * from T1 a where  exists (select 1 from T1 where fldcph=fldcph and   TO_CHAR(a.starttime, 'YYYY-MM-DD HH24:MI')>'2015-11-04 13:47:00')


结果
--------------------------------
ID   FLDCPH                    STARTTIME
A                              2015-11-06 15:42:52
B        OXA                   2015-11-05 11:26:30
---------------------------------
查询语句
select * from T1 a where  exists (select 1 from T1 where fldcph=a.fldcph and   TO_CHAR(a.starttime, 'YYYY-MM-DD HH24:MI')>'2015-11-04 13:47:00')


结果
--------------------------------
ID   FLDCPH                    STARTTIME
B        OXA                   2015-11-05 11:26:30
---------------------------------




这个问题在论坛里提问过,大家对每个进行了回一个复,加上在一些标准资料查询查阅后,得到了比较满意的结果
论坛中xiaowengang回复:fldcph=fldcph是一个恒等式。
所以实际select * from T1 a where  exists (select 1 from T1 where fldcph=fldcph and   TO_CHAR(a.starttime, 'YYYY-MM-DD HH24:MI')>'2015-11-04 13:47:00')等价于
select * from T1 a where  exists (select 1 from T1 where    TO_CHAR(a.starttime, 'YYYY-MM-DD HH24:MI')>'2015-11-04 13:47:00')
因此查询中得到了2条数据


实际第二个查询语句我对于别名fldcph=a.fldcph,期初是觉得也是恒等的,但实际上的结果并是这样,在论坛xiaowengang回复中,可以把fldcph=a.fldcph看成两个不同的列的比较,




但是这里之后会引申到一个新的问题当两者为null的时候会出现null=null的比较,这里对论坛回复null=null等于false,我再在网上查阅了一些资料得到了ANSISQL(SQL-92)标准中的描述


即ANSISQL(SQL-92)标准中Null值的比较取值结果都为False,既Null=Null取值也是False
因此数据数据中只有ID为B的数据可行


总结:select * from T1 a where  exists (select 1 from T1 where fldcph=a.fldcph这个局行在网上都能找的到,但是实际上如果我们在查询中需要到null列的数据的fldcph=a.fldcph是不需要的

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值