我正在使用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的已知功能/错误吗?
答案 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
。您使用什么工具来运行查询?