조인이 궁금합니다.. 0 2 509

by 공석현 조인 join [2015.11.04 10:37:42]


두개의 테이블이 있을때 교집합을 뺀 나머지만 출력하고싶습니다. full outer join 을 이용해서 하긴햇는데 이걸 안쓰고는 어떤 방식으로 가능할까요?? not exists를 생각해봣는데 서브쿼리에 조건을 어떻게 줘야할지 모르겟습니다..도움좀 주시면 감사하겟습니다 mysql 사용중입니다!

 

 

by 우리집아찌 [2015.11.04 11:01:03]

FULL OUTER JOIN 대신은 UNION ALL..


by 마농 [2015.11.04 11:04:04]

1. 테이블 전체 행 비교인지?
2. 특정 키컬럼들만 비교인지?
1번의 경우라면 차집합을 이용하시는게 좋을 듯 하구요
2번의 경우라면 NOT IN, NOT EXISTS, OUTER JOIN 후 널체크 등의 방법이 있습니다.
1번과 2번 모두 쿼리 각각 두번 사용해서 Union All 하셔야 할 듯.
full outer join 했으면 Union All 없이 한번에 되겠네요.
 

-- 1. Minus
(SELECT * FROM aaa MINUS SELECT * FROM bbb)
UNION ALL
(SELECT * FROM bbb MINUS SELECT * FROM aaa)
;
-- 2. Not In
SELECT *
  FROM aaa
 WHERE pk NOT IN (SELECT pk FROM bbb)
 UNION ALL
SELECT *
  FROM bbb
 WHERE pk NOT IN (SELECT pk FROM aaa)
;
-- 3. Not Exists
SELECT *
  FROM aaa a
 WHERE NOT EXISTS (SELECT 1 FROM bbb b WHERE b.pk = a.pk)
 UNION ALL
SELECT *
  FROM bbb b
 WHERE NOT EXISTS (SELECT 1 FROM aaa a WHERE a.pk = b.pk)
;
-- 4. Outer Join & Is Null
SELECT a.*
  FROM aaa a
  LEFT OUTER JOIN bbb b
    ON a.pk = b.pk
 WHERE b.pk IS NULL
 UNION ALL
SELECT b.*
  FROM bbb b
  LEFT OUTER JOIN aaa a
    ON b.pk = a.pk
 WHERE a.pk IS NULL
;
-- 5. Full Outer Join & Is Null
SELECT a.*
     , b.*
  FROM aaa a
  FULL OUTER JOIN bbb b
    ON a.pk = b.pk
 WHERE (a.pk IS NULL OR b.pk IS NULL)
;

 

댓글등록
SQL문을 포맷에 맞게(깔끔하게) 등록하려면 code() 버튼을 클릭하여 작성 하시면 됩니다.
로그인 사용자만 댓글을 작성 할 수 있습니다. 로그인, 회원가입