나는 다음 업데이트 문을 사용하여 PostgreSQL의와 MySQL 모두에 공급 테이블을 업데이트하기 위해 노력하고있어 : null의 경우는,만큼 CURDEBT
열이 NOT NULL 동등하게 잘 작동이상한 SQL을 업데이트 행동
UPDATE SUPPLIERS SET CURDEBT = CURDEBT + 10 WHERE ID = 5
을 레코드를 업데이트하지 않습니다. 어떤 신체에이 문제에 대한 해결책이 있습니까?
감사
나는 다음 업데이트 문을 사용하여 PostgreSQL의와 MySQL 모두에 공급 테이블을 업데이트하기 위해 노력하고있어 : null의 경우는,만큼 CURDEBT
열이 NOT NULL 동등하게 잘 작동이상한 SQL을 업데이트 행동
UPDATE SUPPLIERS SET CURDEBT = CURDEBT + 10 WHERE ID = 5
을 레코드를 업데이트하지 않습니다. 어떤 신체에이 문제에 대한 해결책이 있습니까?
감사
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
좋은 설명 감사합니다. –
사용이 coalesce
UPDATE SUPPLIERS SET CURDEBT = coalesce(CURDEBT,0) + 10 WHERE ID = 5
는 SQL에서
찾고있는 사람 : 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
그 동작은 널 (null) + X = 널 (null) 이후, 항상 SQL에서 기대해야 정확히 무엇이다.
당신은 너무처럼의 병합 기능을 사용하여 포스트 그레스와 MySQL에서 모두 사용할 수 그것을 해결할 수 :
UPDATE SUPPLIERS SET CURDEBT = COALESCE(CURDEBT,0) + 10 WHERE ID = 5
어떻게 NULL + (10)가 행동을 기대? (NULL == 정의되지 않음) – Jaymz
이 대한 해결 방법이 있습니까 –
아래에 내 대답을 추가했습니다 - Coalesce. – Jaymz