Join 해서 해당하는 전체 그룹값 가져오기 0 6 919

by 잭키올 [SQL Query] [2018.10.02 21:06:38]


안녕하세요.

아래와 같은 예제에서 

왼쪽 테이블을 기준으로 오른쪽 테이블에 left join 하여 Max 값을 가져와 값을 가져오고 있는데요.

이렇게 하는 방법 말고 더 좋은 방법이 있는가 하여 질문을 드립니다.

Q. 안정환이 속한 반을 찾아 그 반에 속한 모든 학생의 이름과 속성값을 가져오고 싶습니다.

이름   이름
안정환 1   안정환
이천수 1    
최용수 2    
박지성 2    
       
       
       
<결과>      
이름    
안정환 1    
이천수 1    

 

 

by 봄빛 [2018.10.03 00:30:07]

DB는 postgreSQL에서 실행했습니다.

좋은방법이라기보다는 좀 다른방법으로 작성해봣어요

WITH TEST1 (NAME,CLASS) AS
(
  SELECT '안정환',  '1' UNION ALL
  SELECT '이천수',  '1' UNION ALL
  SELECT '최용수',  '2' UNION ALL
  SELECT '박지성',  '2'


)
,TEST2 (NAME) AS
(
  SELECT '안정환'

)
 
,TEST3 (CLASS) AS
(
  SELECT CLASS FROM TEST1 A ,TEST2 B WHERE A.NAME = B.NAME GROUP BY CLASS
)
SELECT A.NAME,A.CLASS
FROM TEST1 A
    ,TEST3 B
WHERE A.CLASS = B.CLASS

 


by 잭키올 [2018.10.04 21:41:32]

임시 테이블을 활용해서 하면 되겠군요!


by 마농 [2018.10.04 10:30:38]
SELECT a.*
  FROM t a
     , t b
 WHERE a.반 = b.반
   AND b.이름 = '안정환'
;

 


by 잭키올 [2018.10.04 21:42:04]

마농님, Table B 에는 안정환만 있고 반이 없습니다. inner join 으로 가능한 부분인가요..?


by 마농 [2018.10.05 08:27:54]

저는 안정환 이 조건값인줄 알았어요.
테이블이 따로 있는지 모르고
셀프조인으로 답변 드렸던 것입니다.

SELECT a.*
  FROM t_a a
     , t_a c
     , t_b b
 WHERE a.반 = c.반
   AND c.이름 = b.이름
;

SELECT a.*
  FROM t_a a
 INNER JOIN t_a c
    ON a.반 = c.반
 INNER JOIN t_b b
    ON c.이름 = b.이름
;

 


by 잭키올 [2018.10.16 19:17:52]

너무 감사드립니다. Self Join 이란 이렇게 활용하는거였군요.. 

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