SQL连接不等于返回一些相等的列

时间:2014-11-16 22:53:08

标签: sql sql-server tsql join sql-server-2012

我在同一个表上运行这两个查询。此查询

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条记录。

为什么<>会对某些记录起作用而其他记录却不起作用?两列都是浮点数。有什么想法吗?

2 个答案:

答案 0 :(得分:0)

可能的是,至少有一个PersomID或ReportValue / TestValue列可以是VARCHAR()数据类型,而不是INTEGER数据类型。如果它是varchar数据类型,那么这些值中的某些值可能包含一个您现在无法看到的空格。

因此,如果您的ReportValue = 8991 AND TestValue ='8991',它们将导致条件返回FALSE。

答案 1 :(得分:0)

只需删除InnerJoin并执行Left Join