sql 질문드려요

sql 질문드려요

QA

sql 질문드려요

답변 1

본문

상품일련번호가 각 테이블당 300백만개정도 되고 그런 테이블이 8개 이며

계속적으로 상품일련번호 테이블이 추가가 되는 상황입니다

추가되는 상품일련번호가 기존에 있는 일련번호들과 중복이 있다면 중복된일련번호를 제거하고

중복이 안되는 항목만 보고싶습니다

 

SELECT 200101.num1
FROM 200101 LEFT JOIN 200801  ON 200101.num1 = 200801.num1
WHERE (((200801.num1) Is Null));

 

현재는

1번 테이블 200101

2번 테이블 200201

3번 테이블 200301 식으로 되어있는 테이블들과 새로추가되는 테이블을 개별적으로 조인해서 비교를하고 있는데 이게 점점 많아지니까 힘들어져서요

 

 새로추가되는 테이블과 기존에 있는 테이블들을 한번에 비교해서 기존에 있던 테이블들과 중복이 되는것들을 빼고 보려면 조건을 어떻게 걸어야 하는지 모르겠어서 질문드립니다

 

현재 200101 and 200201 and 200301 형식은 사용해 봤는데 이건

01,02,03에 모두 중복이 되는 애들만 제가하는거 저 중에 하나의 테이블에만 중복이 있으면 그값은 불러와졌습니다.

이 질문에 댓글 쓰기 :

답변 1


select num1 from 200101 a
where not exists (select 'x' from 200201 b where b.num1 = a.num1)
  and not exists (select 'x' from 200301 c where c.num1 = a.num1)
  and not exists (select 'x' from 200401 d where d.num1 = a.num1)
  and not exists (select 'x' from 200501 e where e.num1 = a.num1)
  and not exists (select 'x' from 200601 f where f.num1 = a.num1)
  and not exists (select 'x' from 200701 g where g.num1 = a.num1)
  and not exists (select 'x' from 200801 h where h.num1 = a.num1)

와 같이 확인하면

기준테이블을 200101 로 놓고 그 이외의 테이블들에서 중복이 없는것만 추출해서 확인하는 방법입니다.

중요한건 기준테이블에 기준이 필요한것이죠

추가적으로 필요하면

exists 구문에 검색해보세요

 

 

 

답변 감사합니다
이 방법은 200101 테이블에 모든테이터가 있을때 가능한거 아닌가요?
0101,0201,0301 등 에 있는 값들이 모두 200101테이블에 있을때 사용하는것으로 알고 있어서요.

제가 원하는건 각 테이블에 중복이 되는 값들도 있고 아닌값들도 있는데 이걸 새로 추가하는 테이블과 비교할때마다 새로 추가하는 테이블을 불러올때 중복이 제거된 데이터만 가져오고 싶어서요

위 알려주신 방법대로 하려면 새로운 테이블을 추가하기전에 그 전에 추가되었던 테이블을 기준테이블인 200101 테이블로 값을 통합시켜야 할것 같은데 아닌가요??

데이타를 조회하고 정제하려면
기준이되는 테이블의 기준점이 명확해야합니다.
말씀하신대로 다 있는데 중복은 제거..
이거 매우 모호한 방법이거든요
기준점을 잡는게 중요합니다.

말씀하신대로 기준테이블을 굳이 200101로 통합할필요는 없지만
데이타가 많다면 많은게 기준이 되어야하고
적당히 비슷한 양이라면
통합테이블(임시)로 만들어서 기준을 잡고
필터링을 걸어서 보는것도 방법이될겁니다.

답변을 작성하시기 전에 로그인 해주세요.
QA 내용 검색
질문등록
전체 17,127
© SIRSOFT
현재 페이지 제일 처음으로