2011-03-20 52 views
0

我嘗試使用下面的更新語句都PostgreSQL和MySQL更新供應商表:奇怪的SQL UPDATE行爲

UPDATE SUPPLIERS SET CURDEBT = CURDEBT + 10 WHERE ID = 5 

這隻要CURDEBT列不等於空工作正常,如果是空它不會更新記錄。任何機構都有解決這個問題的辦法嗎?

感謝

+2

你怎麼會想到NULL + 10表現? (NULL == undefined) – Jaymz 2011-03-20 19:37:04

+0

有沒有解決這個問題的方法 – 2011-03-20 19:38:10

+0

我在下面添加了我的答案 - 合併。 – Jaymz 2011-03-20 19:40:17

回答

6

在SQL中,NULL是不一樣的東西0上一個NULL值的任何操作仍產生NULL結果。 NULL + 10仍然是NULL。

如果您希望NULL在此查詢自動變成 「0」,試試這個(PostgreSQL的):

UPDATE SUPPLIERS SET CURDEBT = coalesce(CURDEBT, 0) + 10 WHERE ID = 5 

或者MySQL的

UPDATE SUPPLIERS SET CURDEBT = ifnull(CURDEBT, 0) + 10 WHERE ID = 5 
+0

很好的解釋謝謝 – 2011-03-20 19:49:04

6

使用​​3210

UPDATE SUPPLIERS SET CURDEBT = coalesce(CURDEBT,0) + 10 WHERE ID = 5 

sqlbook

3

這種行爲正是你應該期望什麼從SQL,因爲空+ X = NULL,始終。

您可以通過使用COALESCE函數解決這個問題,在這兩個的Postgres和MySQL提供,像這樣:

UPDATE SUPPLIERS SET CURDEBT = COALESCE(CURDEBT,0) + 10 WHERE ID = 5