2012-12-03 9 views
1

모든 데이터베이스에서 coalesce()을 사용하여 nullable 필드를 비교하여 동일한 지 비교하는 것이 일반적입니다. 예를 들어 두 개의 null 입력 가능 문자열 필드를 비교하는 경우 where coalesce(tbl1.stringfield,'') = coalesce(tbl2.stringfield,'')을 사용합니다. 이는 ''의 빈 문자열이 문맥 상 매우 잘 변환되어 null이되기 때문에 효과가 있습니다.nullable 필드를 동일하게 비교하는 방법은 무엇입니까?

그러나 "비어있는"데이터가없는 날짜 또는 숫자 같은 데이터 유형을 처리하는 경우 어떻게해야합니까? Teradata에서 where coalesce(tbl1.numberfield,'') = coalesce(tbl2.numberfield,'')을 시도하면 필드 중 하나가 null이 아닌 경우 데이터 유형 불일치 오류가 발생합니다. 이는 숫자를 빈 문자열과 비교하려고 시도하기 때문입니다. 작동 시키려면 where coalesce(tbl1.numberfield,0) = coalesce(tbl2.numberfield,0)을 사용해야합니다. 그러나 tbl1.numberfield가 null이고 tbl2.numberfield가 실제로 0의 값을 포함하면 어떻게됩니까?

where case 
    when 
     (tbl1.numberfield is null and tbl2.numberfield is null) or 
     (tbl1.numberfield is not null and tbl2.numberfield is not null) or 
     tbl1.numberfield <> tbl2.numberfield 
    then 1 
    else 0 
end = 1 

그리고 : 조건이 참 반환 WHERE 하나 개의 값이 널 (null)이고 다른 하나는 내가이 매우 투박한 케이스 로직이 볼 수있는이 주변에있는 유일한 방법 0이기 때문에 때, 현실에서, 그것은 거짓을 반환해야 함 2 개의 널을 단순한 등호와 비교하면 모든 것을 피할 수 있다고 생각하는 것입니다. 뿐만 아니라

SELECT * FROM TABLE A, TABLE2 B WHERE A.a = B.a or (A.a is NULL and b.A is NULL) 

이 내가이 모든 경우에 작동해야하고 익숙 널 수 필드에 주식을 확인하기위한 표준 왜

답변

2

. 그것의 더 똑 바른 독자를 위해 그리고 빨리 달려야한다.