[DB 초보 질문] 0 4 725

by DB_SQL [Oracle 기초] [2020.11.04 11:12:58]


질문.PNG (20,339Bytes)

안녕하세요? 저는 DB를 시작한지 얼마 안된 초보입니다.

감리사 문제를 풀다가 쿼리로 바꾸면 어떻게 될까 고민해보고 오라클로 시도도해봤는데, 잘 안돼서 질문을 드립니다.

아래 테이블에서 R,S를 통해 '결과' 테이블을 출력하는 쿼리를 만드려고 합니다. S 테이블의 B 값을 모두 가지고 있는 R 테이블에 있는 이름을 출력하라는 정도의 문제인 것 같은데, 제가 아직 상관 관계 서브쿼리 등의 개념이 부족하고, 쿼리 순서도 잘 몰라서 헤매고 있습니다..

그리고 제가 짠 대로 하면 NULL 값만 출력됩니다...

어디서 잘못된 것일까요??

 

SELECT A FROM R WHERE NOT EXISTS((SELECT B FROM S) MINUS (SELECT B FROM S S1 WHERE S1.B=R.B));

 

 

by pajama [2020.11.04 12:31:14]

exists 로는 잘 모르겠네요..

 

with r as (
select 'John' a, 5 b from dual
union all select 'Tom', 8 from dual
union all select 'Mary', 8 from dual
union all select 'Tom', 1 from dual
union all select 'Mary', 5 from dual
union all select 'Tom', 5 from dual
),
s as (
select 1 b, 'alpha' c from dual
union all select 5, 'beta' from dual
union all select 8, 'zetta' from dual
)
select a from r, s where r.b=s.b group by a having count(*) = (select count(*) from s)

 


by DB_SQL [2020.11.04 21:11:52]

답변해주셔서 감사합니다..!!


by DB_SQL [2020.11.04 21:12:20]

NOT EXISTS로는 방법이 없을까요 혹시..??ㅜㅜㅎ...


by 마농 [2020.11.17 08:27:14]
SELECT a
  FROM r
 GROUP BY a
HAVING NOT EXISTS (SELECT b
                     FROM s
                    MINUS
                   SELECT b
                     FROM r r1
                    WHERE a = r.a
                   )
;

 

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