2014-11-16 45 views
0

我在同一个表上运行这两个查询。此查询SQL连接不等于返回一些相等的列

SELECT * 
FROM @Table1 t1 
JOIN @Table2 t2 ON t1.PersonID = t2.PersonID 

返回300条记录(两个表都有300条记录),不排除值不匹配的记录。

enter image description here

这个查询:

SELECT * 
FROM @Table1 t1 
JOIN @Table2 t2 ON t1.PersonID = t2.PersonID AND t1.TestValue <> t2.ReportValue 

返回90条记录:

enter image description here

第二查询中排除许多与相同值的记录,但不是全部,它应该返回只有20条记录。

为什么<>可以在某些记录上工作,但不能在其他记录上工作?这两列都是浮动的。有任何想法吗?

+4

我的猜测是这些值实际上并不相等,但是你[在输出中看到四舍五入的值](http://stackoverflow.com/questions/8099575/full-precision-output-of-浮点类型在SQL服务器管理工​​作室),所以他们*看起来*平等。比较花车总是会有点棘手;您可能想要使用“epsilon”比较而不是直接平等。 –

+0

这些都是int列吗?如果不是可能会有额外的空白区域,请尝试使用LTRIM和RTRIM以及Join条件中的所有列。 –

+0

是否t1.TestValue和t2.ReportValue是相同的数据类型? – Kennah

回答

0

有可能的是,您的PersomID或ReportValue/TestValue列中至少有一列可以使用VARCHAR()数据类型,而不是INTEGER数据类型。如果它是varchar数据类型,那么可能有一些值在最后包含一个空格,现在您无法看到它。因此,如果您的ReportValue = 8991 AND TestValue ='8991',它们将导致条件返回FALSE。