2011-03-20 13 views
0

나는 다음 업데이트 문을 사용하여 PostgreSQL의와 MySQL 모두에 공급 테이블을 업데이트하기 위해 노력하고있어 : null의 경우는,만큼 CURDEBT 열이 NOT NULL 동등하게 잘 작동이상한 SQL을 업데이트 행동

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

을 레코드를 업데이트하지 않습니다. 어떤 신체에이 문제에 대한 해결책이 있습니까?

감사

+2

어떻게 NULL + (10)가 행동을 기대? (NULL == 정의되지 않음) – Jaymz

+0

이 대한 해결 방법이 있습니까 –

+0

아래에 내 대답을 추가했습니다 - Coalesce. – Jaymz

답변

6

sqlbook을 참조하십시오 NULL NULL 값에 대한 모든 작업이 여전히 NULL 결과를 얻을 수 0 같은 일이 아닙니다. NULL + 10은 여전히 ​​NULL입니다.

자동이 쿼리에 "0"으로 설정하는 NULL하려면이 (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

좋은 설명 감사합니다. –

6

사용이 coalesce

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

는 SQL에서

3

그 동작은 널 (null) + X = 널 (null) 이후, 항상 SQL에서 기대해야 정확히 무엇이다.

당신은 너무처럼의 병합 기능을 사용하여 포스트 그레스와 MySQL에서 모두 사용할 수 그것을 해결할 수 :

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