서브 쿼리 형식의 OUTER JOIN을 일반적인 JOIN 형식으로 작성할 수 있을까요? 0 7 878

by 도뎡이 [SQL Query] mysql outer join [2022.02.15 09:51:10]


안녕하세요, 선배님들.
아래의 SQL 쿼리에서 PASS(LEFT OUTER JOIN) 테이블을 서브 쿼리 형식으로 조회하는데요.
서브 쿼리 형식이 아닌, 일반적인 조인 형식으로 변경할 수 있을까요?
선배님들의 소중한 피드백 미리 감사드립니다!

SELECT
      FAM.*
FROM
    family AS FAM -- 가족
    INNER JOIN client AS ME ON FAM.me_client_id = ME.client_id -- 본인
    INNER JOIN client AS OTHER ON FAM.other_client_id = OTHER.client_id -- 상대방
    LEFT OUTER JOIN (
        SELECT client_id, MAX(passport_id)
        FROM passport
        GROUP BY client_id
    ) AS PASS ON OTHER.client_id = PASS.client_id -- 여권
WHERE
    FAM.me_client_id = 1038

 

by 마농 [2022.02.15 10:06:52]

가능은 한데?
현재 쿼리는 조인 자체가 필요 없는 쿼리입니다.
조인되는 테이블들의 컬럼은 전혀 조회를 하지 않고 있네요.


by 도뎡이 [2022.02.15 11:43:55]

마농 선생님 답변 감사드립니다!

현재 작성한 SQL은 임시로 작성한 SQL 쿼리입니다 :)

"현재 쿼리는 조인 자체가 필요 없는 쿼리이다"라고 말씀해 주셨는데,

어떠한 방식으로 접근하면 좋을지 피드백 주시면 감사하겠습니다..!


by 마농 [2022.02.15 13:02:08]

SELECT fam.* 상태에서는 답변이 불가합니다.
조회 필요 항목을 명확하게 적어주셔야 합니다.


by 도뎡이 [2022.02.15 13:42:33]

넵! 쿼리 다시 작성해서 글 올리도록 하겠습니다!


by 도뎡이 [2022.02.15 14:09:16]

마농 선생님, 여기에 질문 다시 작성했습니다!


by lionqueen [2022.02.15 11:32:20]

잘은 모르겠지만,

본인과 가족의 여권 정보를 원하는것 같네요.

 

SELECT FAM.me_client_id
     , CASE WHEN C.client_id = FAM.me_client_id THEN 'ME' ELSE 'FAM' END
     , C.client_id
     , MAX(PASS.passport_id)    AS passport_id
  FROM family                    AS FAM -- 가족
 INNER JOIN client                AS C 
    ON C.client_id IN ( FAM.me_client_id -- 본인  
                      , FAM.other_client_id) -- 상대방
  LEFT OUTER JOIN passport        AS PASS -- 여권
    ON C.client_id        = PASS.client_id 

WHERE FAM.me_client_id    = 1038
GROUP BY FAM.me_client_id
       , CASE WHEN C.client_id = FAM.me_client_id THEN 'ME' ELSE 'FAM' END
       , C.client_id


by 도뎡이 [2022.02.15 11:45:13]

lionqueen 선배님 답변 감사드립니다!

네.. 본인, 가족의 여권 정보를 얻으려고 하는 것이 맞습니다.

QueryDSL을 이용하면 인라인 뷰 서브쿼리 등을 지원해주지 않는다고 해서 방법을 찾고 있었습니다..

구루비 방문할 때마다 커다란 걸 하나씩 배워가네요...

정말 감사드립니다! 좋은 하루 되세요 :)

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