2014-11-16 71 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。