mssql 두개의 테이블 비교(컬럼 값이 다른 두 테이블 비교하기)


##

두개의 테이블(h와 s테이블)을 비교해서 h테이블과 s테이블의 컬럼의 값이 다른 것row만 추출하고 싶었다.

처음에는

select h.컬럼1, s.컬럼1 from 테이블 h in (select s.컬럼1 from 테이블 s)

이렇게 썼었다.

그런데 원하는 결과가 안나오는거시다..!

알고봤더니 저 쿼리문의 진짜 직역뜻은 (select s.컬럼1 from 테이블 s)의 레코드셋에 아예 값이 없어서

일치하지 않는 경우만 해당되는 것이다.

이게 무슨 말이냐면… (select s.컬럼1 from 테이블 s)을 조회하면 x개의 레코드셋이 결과로 나오게 되는데

그 수백개의 레코드셋중에 아예 일치하는 값이 없는 결과들만 나온다는 뜻이다.

예를 들어, h테이블에서는 aaa로, s테이블에서는 bbb로 값이 들어있는 경우, 이렇게 하나씩 비교해서 이런 경우만 결과값으로 찾고싶은건데

(select s.컬럼1 from 테이블 s) 레코드셋안에 bbb값이 하나라도 있으면 결과가 도출되지 않는다.

그래서 이럴때는 inner join으로 두 테이블을 먼저 join시킨후 비교값을 도출해낸다.

컬럼2가 서로 일치하는 1:1매칭을 시켜준뒤(inner join) 컬럼1이 서로 다른 row들만 select해서 보여준다.

select h.컬럼1, s.컬럼1 from 테이블 h inner join 테이블 s on h.컬럼2 = s.컬럼2
where h.컬럼1 != s.컬럼1





© 2018. by sora

Powered by sora