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
운영게시판
최근게시물
MySQL Q&A 31363 게시물 읽기
No. 31363
두 개의 SELECT 결과를 비교하여 유일한 값을 가져오는 방법
작성자
김현석
작성일
2022-04-05 10:31
조회수
7,941

안녕하세요 하나의 table A 에 다음과 같은 데이터가 있습니다

 

country | IP

===============

KR 1.1.1.1

JP 1.1.1.1

KR 1.1.1.2

JP 1.1.1.3

...

 

위의 데이터 중 KR과 JP 가 겹치지 않는 IP 값을 추출하고 싶습니다. (KR 기준으로 )

즉 위에서 얻고자 하는 값은 KR 에만 존재하는 1.1.1.2 를 가져와야 합니다

 

 

아래처럼 KR에 해당하는 IP리스트를 뽑아내고, JP 에 해당 하는 IP 리스트를 비교해서 KR 에만 가져오는 방법이 있을까요?

 

Select IP

from table_A

where country=KR

 

 

Select IP

from table_A

where country=JP

 

감사합니다

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

not in 이나 not exists 사용하시면 될듯합니다.


select * from table

where country ='KR' and ip not in (select ip from table where country = 'JP');

정상규(pajama)님이 2022-04-05 13:03에 작성한 댓글입니다.

알려주신대로 not in 을 사용하면 항상 NULL 데이터 값이 나옵니다

select * from table

where country ='KR' and ip not in (select ip from table where country = 'JP');


문제는 각각의 조건으로 하면 IP List가 나오는데 이유를 모르겠습니다
 

select ip from table

where country ='KR' 

== IP 정보 있음 ==
 

select ip from table

where country ='JP' 

​​​​​​​== IP 정보 있음 ==
 

김현석님이 2022-04-05 13:27에 작성한 댓글입니다. Edit
SELECT ip FROM table_a WHERE country = 'KR'
EXCEPT
SELECT ip FROM table_a WHERE country = 'JP'
;

SELECT ip
  FROM table_a
 WHERE country = 'KR'
   AND ip NOT IN (SELECT ip FROM table_a WHERE country = 'JP')
;

SELECT ip
  FROM table_a a
 WHERE country = 'KR'
   AND NOT EXISTS (SELECT 1
                     FROM table_a b
                    WHERE b.country = 'JP'
                      AND b.ip = a.ip
                   )
;

SELECT a.ip
  FROM table_a a
  LEFT OUTER JOIN table_a b
    ON b.country = 'JP'
   AND b.ip = a.ip
 WHERE a.country = 'KR'
   AND b.ip IS NULL
;

 
마농(manon94)님이 2022-04-05 14:03에 작성한 댓글입니다.

NOT IN 으로 했는데 결과가 안나온다면?

1. 조건을 만족하는 자료(KR 만 존재하는 자료)가 없는 경우

2. JP 자료 중에 IP 가 널인 자료가 존재할 경우

2번의 경우는 널의 특수성 때문에 발생하는 현상입니다.

NOT IN 에 널이 포한되면 그 조건은 절대로 참이 될 수 없습니다.


SELECT ip

   FROM table_a

  WHERE country = 'KR'

    AND ip IS NOT NULL

    AND ip NOT IN (SELECT ip

                     FROM table_a

                    WHERE country = 'JP'

                      AND ip IS NOT NULL

                   )

 ;

마농(manon94)님이 2022-04-05 14:06에 작성한 댓글입니다.
이 댓글은 2022-04-05 14:29에 마지막으로 수정되었습니다.
[Top]
No.
제목
작성자
작성일
조회
31368mssql에서 mysql로 이행시데이터변환 [1]
WaitToken
2022-04-11
9529
31367unixtime stamp 로 저장되어 있는 데이터 날짜 비교하기 [1]
규야
2022-04-11
9428
31366MYSQL 성능관련 문의
zzzz
2022-04-11
8700
31363두 개의 SELECT 결과를 비교하여 유일한 값을 가져오는 방법 [4]
김현석
2022-04-05
7941
31361특정 필드 기준으로 각 필드의 합을 구하는 방법 [4]
규야
2022-03-24
5880
31360필드내 구분자로 들어가 있는 데이터 select 하는 방법 문의 [4]
조현철
2022-02-27
2692
31359mysql with 버전 오류 문의 드립니다. [2]
정동호
2022-02-07
2373
Valid XHTML 1.0!
All about the DATABASE... Copyleft 1999-2024 DSN, All rights reserved.
작업시간: 0.021초, 이곳 서비스는
	PostgreSQL v16.2로 자료를 관리합니다