두 컬럼이 서로 null인데도 where조건 걸면 다르다고 나오네요. 0 2 1,565

by 문진균 [2007.05.29 00:23:11]


A테이블의 STAFFID는 CHAR(8)이고 B테이블의 TR_ID는 VARCHAR2(16)입니다.

 

WHERE A.STAFFID = B.TR_ID 

 

두 값이 모두 null인 경우에는 위 조건을 충족시키지 못해서인지

 

데이터가 조회되지 않습니다. 위 조건만 빼고 실행시키거나

 

두 컬럼에 같은 값을 집어넣고 조회하면 데이터가 정상적으로

 

조회되는 것으로 보아서 위 조건때문인 것으로 생각됩니다.

 

제가 null로 몇번이나 업뎃, 커밋 했으니까 두 값모두 null인 것은 확실합니다.

 

그런데도 서로 값이 다르다고 조회를 해주지를 않네요

 

혹시 이유를 아시는 님 계신가요?

 

WHERE NVL(A.STAFFID,0) = NVL(B.TR_ID,0)

 

이렇게 바꿔서 실행시키니 정상적으로 데이터를 가져오는데요

 

이렇게 하는 것이 맞는지, 다른 좋은 방법이 있는지 알고 싶습니다.

 

Windows XP, Visual Basic6, Oracle 10g, Golden, Orange사용하고 있습니다.

 

 제가 잘못 안 것인지 아니면 저러한 경우가 있는지 알고 싶습니다.

by 강정식 [2007.05.29 00:00:00]
미지수(NULL)끼리 비교연산을 할 수는 없습니다.
이유는 어떤값인지 모르기 때문이죠.
그래서 'A.STAFFID = NULL' 이렇게 조건을 주어도 데이터를 못가져옵니다. 'A.STAFFID IS NULL' 이렇게 하셔야 하죠.
NVL() 함수를 이용하여 변환한 뒤 비교했을때는 데이터를 가져오는게 이해가 가실겁니다.

by 문진균 [2007.05.29 00:00:00]
널인 경우에는 비교를 할 수가 없는 것이군요..
답변 감사합니다. ^^
댓글등록
SQL문을 포맷에 맞게(깔끔하게) 등록하려면 code() 버튼을 클릭하여 작성 하시면 됩니다.
로그인 사용자만 댓글을 작성 할 수 있습니다. 로그인, 회원가입