database.sarang.net
UserID
Passwd
Database
DBMS
MySQL
PostgreSQL
Firebird
Oracle
Informix
Sybase
ㆍMS-SQL
DB2
Cache
CUBRID
LDAP
ALTIBASE
Tibero
DB 문서들
스터디
Community
공지사항
자유게시판
구인|구직
DSN 갤러리
도움주신분들
Admin
운영게시판
최근게시물
MS-SQL Q&A 5593 게시물 읽기
No. 5593
NULL = NULL 문제가...
작성자
조중규(biosensor)
작성일
2010-03-06 00:36
조회수
5,861

현재 난관에 부딪쳐있습니다.

NULL 이 들어있는 두개의 컬럼을 비교해야하는 문제이구요. 즉

SELECT 어쩌구저쩌구
  FROM [TABLE1] t1 INNER JOIN [TABLE2] t2
    ON t1.aaa = t2.aaa
   AND t1.bbb = t2.bbb -- 두개다 NULL 일수도 있습니다.
   AND t1.ccc = t2.ccc -- 두개다 NULL 일수도 있습니다.

여기서 조건절을 ISNULL 함수로 가공해야하는 문제가 발생하는데요. 인덱스가 걸리는군요.

묘안이 없을까요.

이 글에 대한 댓글이 총 3건 있습니다.

안녕하세요

문제가 뭔지 모르겠네요

구문의 아무 이상없습니다.

조건절에 ISNULL 함수로 가공을 해야 하는 이유는 딱히 없을것 같구요

안되는거 한번 올려줘보세요 샘플로...

구광모(kkm0802)님이 2010-03-08 13:44에 작성한 댓글입니다.

질문도 잘못올렸네요. INNER JOIN 이 아니라 LEFT OUTER JOIN 이었구요.

DECLARE @TABLE1 TABLE
(
   aaa int NULL
 , bbb int NULL
 , ccc int NULL
)
INSERT INTO @TABLE1 VALUES (1, NULL, NULL)
INSERT INTO @TABLE1 VALUES (1, NULL, NULL)
INSERT INTO @TABLE1 VALUES (1, 2, 3) --정상적으로 비교되어 표시됨
INSERT INTO @TABLE1 VALUES (2, 3, NULL) --비정상
INSERT INTO @TABLE1 VALUES (3, 6, NULL)
INSERT INTO @TABLE1 VALUES (3, 6, NULL)
INSERT INTO @TABLE1 VALUES (4, NULL, NULL) --비정상

 

DECLARE @TABLE2 TABLE
(
   aaa int NULL
 , bbb int NULL
 , ccc int NULL
)
INSERT INTO @TABLE2 VALUES (1, 2, 3) --정상적으로 비교되어 표시됨
INSERT INTO @TABLE2 VALUES (1, 3, NULL)
INSERT INTO @TABLE2 VALUES (2, 3, NULL) --비정상 (표시되지 않습니다.)
INSERT INTO @TABLE2 VALUES (4, NULL, NULL) --비정상 (표시되지 않습니다.)


SELECT a.aaa, a.bbb, a.ccc, b.aaa, b.bbb, b.ccc
  FROM @TABLE1 a LEFT OUTER JOIN @TABLE2 b
    ON a.aaa = b.aaa
   AND a.bbb = b.bbb
   AND a.ccc = b.ccc
--   AND ISNULL(a.bbb, 0) = ISNULL(b.bbb, 0) -- 이것이 제가 원하는
--   AND ISNULL(a.ccc, 0) = ISNULL(b.ccc, 0) -- 결과입니다.

추출되어야할 부분은 볼드처리된 데이터이고, 적색처리된 부분은 = 로 처리되어 나타나야할 데이터 입니다. 제가 뭔가 잘못생각하고 있는게 있는게 아닐까요?

글쓴이님이 2010-03-08 14:44에 작성한 댓글입니다.
이 댓글은 2010-03-08 15:31에 마지막으로 수정되었습니다. Edit

ISNULL(a.bbb, 0) = ISNULL(b.bbb, 0) 는 한쪽값이 0일경우 문제
( 0 = null 의 결과가 참이됨 )

 and  a.aaa = b.aaa
 and (a.bbb is null and b.bbb is null
  or  a.bbb = b.bbb) 
 and (a.ccc is null and b.ccc is null
  or  a.ccc = b.ccc) 

로 해보세요

인덱스는 잘모르겠습니다.

박진복(pjb708)님이 2010-03-08 23:56에 작성한 댓글입니다.
[Top]
No.
제목
작성자
작성일
조회
5596외래키의 참조 여부를 판단하는 방법이 있나요?
이지용
2010-03-11
5516
5595날짜 주 구하기 [2]
DBA
2010-03-10
6542
5594오라클 계정 설정 [1]
박창완
2010-03-08
5910
5593NULL = NULL 문제가... [3]
조중규
2010-03-06
5861
55922005관련 가상테이블 지원여부 [1]
열공자
2010-03-05
5335
5591CTE 사용하는 방법
어렵다님
2010-03-04
5942
5590오라클 취업, 오라클 자격증 교육센터
박창완
2010-03-04
6180
Valid XHTML 1.0!
All about the DATABASE... Copyleft 1999-2024 DSN, All rights reserved.
작업시간: 0.018초, 이곳 서비스는
	PostgreSQL v16.2로 자료를 관리합니다