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 6439 게시물 읽기
No. 6439
not in 과 not exists 질문입니다.
작성자
재훈(JHoon)
작성일
2012-11-08 13:50
조회수
8,030

 TAB_A 에서 TAB_B 와 중복되는 데이터를 제외한 나머지 데이터를 보려 합니다.

 

집합으로 하자면 TAB_A 차집합 TAB_B 가 될텐데요

 

처음에는 쿼리를 이렇게 짯습니다.

 

SELECT DISTINCT ID

FROM  TAB_A

WHERE ID NOT IN 

(

SELECT DISTINCT ID FROM TAB_B

)

그랬더니 한건도 안나오더라구요.

 

참고로 TAB_A 에는 ID 로 DISTINCT 했을때, 5325건의 서로 다른 ID 가 들어있었고

TAB_B 는 ID로 DISTINCT 했을 때, 3329 건의 서로 다른 ID가 들어있었습니다.

만약 TAB_B 의 ID가 TAB_A 에 전부 속한다 할지라도 1996 건은 나와야 정상인데, 한건도 안나옵니다.

 

그런데 다음과 같은 형식으로 했더니 데이터가 나오더라구요

 

SELECT DISTINCT ID

FROM TAB_A A

WHERE NOT EXISTS

(

SELECT DISTINCT ID FROM TAB_B 

WHERE A.ID = TAB_B.ID

)

 

뭐가 잘못 된 걸까요?

참고로 ID 는 VARCHAR(255) 입니다.

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

 신기한 현상입니다.

앞에 쿼리문에 왜 안나오는지....

 

 

보통 차집합은

 

SELECT *
FROM TAB_A AS A
LEFT JOIN TAB_B AS B ON A.ID = B.ID
WHERE B.ID IS NULL
;

같은 형식이 젤 많이 쓰이지 않나 싶긴 하지만요...

우욱님이 2012-11-09 15:27에 작성한 댓글입니다. Edit

이유를 알아냈습니다.

tab_b  의 ID 컬럼에  null 값이 있더군요.

c not in ( '1','2','3',null)

의 경우

c <>'1' and c <>'2' and c <>'3'  and c<>null

라고 볼수 있는데,

 

c<> null 은 무조건 false 를 return 합니다.

 

 

JHoon님이 2012-11-10 10:41에 작성한 댓글입니다. Edit
[Top]
No.
제목
작성자
작성일
조회
6443연관성이 없는 테이블 2개를 합쳐서 결과를 보여주고 싶습니다. [4]
초보
2012-11-12
8422
6441MS-SQL 쿼리 질문입니다. [1]
초보자
2012-11-09
7706
6440쿼리 질문드립니다.. [5]
초보입니다.
2012-11-09
8900
6439not in 과 not exists 질문입니다. [2]
재훈
2012-11-08
8030
6438DB반복문이 궁금합니다. [1]
정철민
2012-11-07
8009
6437오라클 프로시저의 RETURN값을 받는방법 [1]
김봉달
2012-11-06
8562
6436쿼리 도움 좀 주세요;; [2]
초보자
2012-11-06
7644
Valid XHTML 1.0!
All about the DATABASE... Copyleft 1999-2024 DSN, All rights reserved.
작업시간: 0.017초, 이곳 서비스는
	PostgreSQL v16.4로 자료를 관리합니다