2012-09-21 67 views
1

所以我想運行一個查詢,它在WHERE語句中做了一些數學運算。看來我寫的是正確的,但似乎並不奏效。做WHERE語句中的添加和比較列

SELECT * 
FROM table 
WHERE col_a + col_b != col_d 

基本上我想看到的所有記錄,其中col_a加入col_b不加起來col_d

+5

什麼是列數據類型?示例數據不起作用? –

+1

http://sqlfiddle.com/#!2/73e67/2 - 如果數據類型爲「INT」,則您的查詢有效。 – Travesty3

+0

他們都是十進制(6,2) – Roeland

回答

2

我可以想到三個原因,爲什麼這似乎不工作。

第一個是最有可能的:一個或多個值爲NULL。爲了解決這個問題,可以使用COALESCE:

where coalesce(col_a, 0) + coalesce(col_b, 0) <> coalesce(col_d, 0) 

另一個原因是,結果你看那個像它們是相同的,但在浮點數的介紹,他們是真正的不同。因此,0.999999999 + 5.0可能看起來像「6.0」,但它不等於「6.0」,因爲它們之間的差異在很遠的小數點。

第三個原因是算術溢出或打字問題(用浮點數等混合微小整數)。

+0

第四個原因可能是運算符優先級(不確定與MySQL)。它可能被解釋爲'col_a +(col_b!= col_d)',並且放置括號會修正:WHERE(col_a + col_b)!= col_d'。正如我所說,我不確定MySQL中的優先順序,所以它可能不適用。 (如果你願意讓我知道它是否適合將來參考,我會很感激的。) –

+0

@KenWhite - [不,已經檢查過](http://dev.mysql.com/doc/refman /5.0/en/operator-precedence.html)'+'的優先級高於'!=' –

+0

@MartinSmith:感謝那些信息。我會在下次把它收起來。 (我不使用MySQL,所以我無法檢查自己。) –