나는 데이터베이스의 필드의 변화를 감지하는 트리거를 쓰고, 그리고 난 그냥왜 NULL 필드가 동일하게 호출 되나요?
이(SELECT SalesPrice FROM __old) <> (SELECT SalesPrice FROM __new)
가
정확하게 필드가있는 경우 감지
(SELECT SalesPrice FROM __old) <> (SELECT SalesPrice FROM __new)
or ((SELECT SalesPrice FROM __old) IS NULL and (SELECT SalesPrice FROM __new) IS NOT NULL)
or ((SELECT SalesPrice FROM __old) IS NOT NULL and (SELECT SalesPrice FROM __new) IS NULL)
보다는처럼 정말 불쾌한 일을 할 필요가 나타납니다 변경되었습니다.
뭔가 누락 되었습니까? 아니면 Advantage가 효과적으로 NULL == 값을 요구합니까? 이 행동에 대한 좋은 이유가 있습니까? 이것은 SQL 정의에서 이상한 일입니까? 더 간결한 방법이 있습니까?이 방법은 3 가지 검사를 하나씩 수행하지 않습니다.
불행하지 않습니다. 그것은 완벽하게 이해합니다. 두 개의 열에 값이없는 경우 그 존재하지 않는 값을 어떻게 비교할 수 있습니까? IEEE NaN 값에서도 동일한 결과를 얻을 수 있습니다. –
@Tomalak 제 문제는 열이 NULL 일 때 SQL은 효과적으로 모든 것이 동일하다고 말합니다. 나는 SQL이 정확히 프로그래밍 언어는 아니지만 NULL 언어가 NULL이라고 가정하는 많은 언어를 알고 있으므로 NULL이 나타날 수있는 비교에서 합리적인 결과를 얻을 수 있습니다. –
@ 에드거 - 경우에 따라 null을 허용하지 않을 수도 있지만 0과 미정 사이에는 차이가 있습니다 (예를 들어). 그러나, 만약 IFNULL이 훌륭하게 작동한다면, 비교할 때 쓸만한 잘못된 값을 쉽게 찾을 수 있습니다. 감사. –