我嘗試使用下面的更新語句都PostgreSQL和MySQL更新供應商表:奇怪的SQL UPDATE行爲
UPDATE SUPPLIERS SET CURDEBT = CURDEBT + 10 WHERE ID = 5
這隻要CURDEBT
列不等於空工作正常,如果是空它不會更新記錄。任何機構都有解決這個問題的辦法嗎?
感謝
我嘗試使用下面的更新語句都PostgreSQL和MySQL更新供應商表:奇怪的SQL UPDATE行爲
UPDATE SUPPLIERS SET CURDEBT = CURDEBT + 10 WHERE ID = 5
這隻要CURDEBT
列不等於空工作正常,如果是空它不會更新記錄。任何機構都有解決這個問題的辦法嗎?
感謝
在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
很好的解釋謝謝 – 2011-03-20 19:49:04
你是什麼尋找是COALESCE
:
UPDATE SUPPLIERS
SET CURDEBT = COALESCE(CURDEBT, 0) + 10
WHERE ID = 5
合併(MySQL的):
http://dev.mysql.com/doc/refman/5.0/en/comparison-operators.html#function_coalesce
這種行爲正是你應該期望什麼從SQL,因爲空+ X = NULL,始終。
您可以通過使用COALESCE函數解決這個問題,在這兩個的Postgres和MySQL提供,像這樣:
UPDATE SUPPLIERS SET CURDEBT = COALESCE(CURDEBT,0) + 10 WHERE ID = 5
你怎麼會想到NULL + 10表現? (NULL == undefined) – Jaymz 2011-03-20 19:37:04
有沒有解決這個問題的方法 – 2011-03-20 19:38:10
我在下面添加了我的答案 - 合併。 – Jaymz 2011-03-20 19:40:17