所以我想運行一個查詢,它在WHERE
語句中做了一些數學運算。看來我寫的是正確的,但似乎並不奏效。做WHERE語句中的添加和比較列
SELECT *
FROM table
WHERE col_a + col_b != col_d
基本上我想看到的所有記錄,其中col_a
加入col_b
不加起來col_d
。
所以我想運行一個查詢,它在WHERE
語句中做了一些數學運算。看來我寫的是正確的,但似乎並不奏效。做WHERE語句中的添加和比較列
SELECT *
FROM table
WHERE col_a + col_b != col_d
基本上我想看到的所有記錄,其中col_a
加入col_b
不加起來col_d
。
我可以想到三個原因,爲什麼這似乎不工作。
第一個是最有可能的:一個或多個值爲NULL。爲了解決這個問題,可以使用COALESCE:
where coalesce(col_a, 0) + coalesce(col_b, 0) <> coalesce(col_d, 0)
另一個原因是,結果你看那個像它們是相同的,但在浮點數的介紹,他們是真正的不同。因此,0.999999999 + 5.0可能看起來像「6.0」,但它不等於「6.0」,因爲它們之間的差異在很遠的小數點。
第三個原因是算術溢出或打字問題(用浮點數等混合微小整數)。
第四個原因可能是運算符優先級(不確定與MySQL)。它可能被解釋爲'col_a +(col_b!= col_d)',並且放置括號會修正:WHERE(col_a + col_b)!= col_d'。正如我所說,我不確定MySQL中的優先順序,所以它可能不適用。 (如果你願意讓我知道它是否適合將來參考,我會很感激的。) –
@KenWhite - [不,已經檢查過](http://dev.mysql.com/doc/refman /5.0/en/operator-precedence.html)'+'的優先級高於'!=' –
@MartinSmith:感謝那些信息。我會在下次把它收起來。 (我不使用MySQL,所以我無法檢查自己。) –
什麼是列數據類型?示例數據不起作用? –
http://sqlfiddle.com/#!2/73e67/2 - 如果數據類型爲「INT」,則您的查詢有效。 – Travesty3
他們都是十進制(6,2) – Roeland