外连接中缺少的行对于float列而言为零而不是null - 为什么?

时间:2009-12-09 09:45:38

标签: sql sql-server join sql-server-2000

我正在使用Microsoft的SQL Server 2000并且有一个基本上是这样的查询(除了Z是另一个子查询,而不是表):

select 
  A.key1,
  A.key2,
  B.value1
from A
left join (select * from Z where value1 > 0) B 
  on A.key1 = B.key1 and A.key2 = B.key2
order by A.key1, B.key1

列value1的类型为float。出于某种原因,不是在子查询B中不存在行的情况下返回NULL,而是将value1设置为0.0。

我解决了这个问题,但有人能说出为什么会这样吗?它是SQL Server的已知功能/错误吗?

1 个答案:

答案 0 :(得分:2)

浮点数不准确,因此值可能略大于0但仍显示为0.如果将查询更改为:

,它会有帮助吗?
left join (select * from Z where value1 > 0.000001) B 

编辑:发表评论后,我检查了一台SQL Server 2000机器:

select t2.col2
from (select 1 as col1) t1
left join (select cast(1.0 as float) as col2) as t2 on 1=0

这对我显示NULL,而不是0.0。您使用什么工具来运行查询?