빠진데이터 찾기 0 9 734

by 하울카 [Oracle 기초] [2019.04.08 13:57:19]


빠진데이터만 찾고 싶은데데요

 

컬럼1  컬럼2

홍길동 사과

홍길동 오렌지

홍길동 배 

김영수 오렌지 

김영수 배

.....

 

김영수에 사과가 빠져있어서 빠져있는 부분만 찾고 싶은데 

어떻게 써야할까요?

 

by 마농 [2019.04.08 14:15:45]

이 테이블 하나만 가지고 풀어야 하는 문제인가요?
혹시? 기준 테이블은 따로 없나요?
  - 이름만 가진 테이블이나 과일만 가진 테이블


by 하울카 [2019.04.08 14:23:54]

네 다른테이블은 없고.. select로만 찾아야 하는 상황이어서요 ㅠ


by 마농 [2019.04.08 14:28:51]
WITH t AS
(
SELECT '홍길동' nm, '사과' cd FROM dual
UNION ALL SELECT '홍길동', '오렌지' FROM dual
UNION ALL SELECT '홍길동', '배'     FROM dual
UNION ALL SELECT '김영수', '오렌지' FROM dual
UNION ALL SELECT '김영수', '배'     FROM dual
)
SELECT b.nm
     , a.cd
  FROM (SELECT DISTINCT cd FROM t) a
  LEFT OUTER JOIN t b
  PARTITION BY (b.nm)
    ON a.cd = b.cd
 WHERE b.cd IS NULL
;

 


by 하울카 [2019.04.08 14:36:38]

이름테이블, 과일테이블 기준테이블이 두개 다 있으면 어떻게 짜야하나요? 데이터가 너무 많아서 하나하나 못쓸거같습니다..


by 마농 [2019.04.08 14:49:23]

"하나하나 못쓸거같습니다.." 의 의미가 뭔가요?
혹시 Union all 로 적어 준 with 문 때문에 그런건가요?
하나하나 일일이 union all 하라는 의미가 아닙니다.
테스트용 데이터를 만들어 테스트한 것 뿐입니다.
with 문 말고 그 아래 쿼리 작성법을 보시면 됩니다.


by 마농 [2019.04.08 14:49:57]
WITH name_t AS
(
SELECT '홍길동' nm FROM dual
UNION ALL SELECT '김영수' FROM dual
UNION ALL SELECT '구루비' FROM dual
)
, fruit_t AS
(
SELECT '사과' cd FROM dual
UNION ALL SELECT '오렌지' FROM dual
UNION ALL SELECT '배'     FROM dual
)
, name_fruit_t AS
(
SELECT '홍길동' nm, '사과' cd FROM dual
UNION ALL SELECT '홍길동', '오렌지' FROM dual
UNION ALL SELECT '홍길동', '배'     FROM dual
UNION ALL SELECT '김영수', '오렌지' FROM dual
UNION ALL SELECT '김영수', '배'     FROM dual
)
SELECT a.nm
     , b.cd
  FROM name_t a
 CROSS JOIN fruit_t b
  LEFT OUTER JOIN name_fruit_t c
    ON a.nm = c.nm
   AND b.cd = c.cd
 WHERE c.cd IS NULL
;

 


by 하울카 [2019.04.08 16:42:08]

답변 감사합니다


by 하울카 [2019.04.08 16:48:11]

이름만 존재하고 과일이 하나도 없는 경우에는 그 이름은 제외시키고 싶은데 어떻게 할까요? 

과일이 하나도 없는 데이터가 많은데 다 나와버려서 엄청많이 나오네요


by 마농 [2019.04.08 17:03:58]
-- 그건 처음 답변드렸던 쿼리 이용하시면 되죠.
SELECT b.nm
     , a.cd
  FROM fruit_t a
  LEFT OUTER JOIN name_fruit_t b
  PARTITION BY (b.nm)
    ON a.cd = b.cd
 WHERE b.cd IS NULL
;

 

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