안녕하세요
oracle에서 mysql 전환 공부진행중 join 관련
ORACLE SELECT A.SYSTM_ID FROM A,B,C,D,E WHERE 1=1 AND A.SYSTM_ID = C.SYSTM_ID(+) AND C.SYSTEM_ID = D.SYSTEM_ID(+) AND B.USER_ID(+) = #{loginId} AND B.USER_ID=E.USER_ID MYSQL SELECT A.SYSTM_ID FROM A LEFT OUTER JOIN (C LEFT OUTER JOIN D ON C.SYSTEM_ID = D.SYSTEM_ID ) ON A.SYSTM_ID = C.SYSTM_ID, B RIGHT OUTER JOIN ????? on B.USER_ID = #{loginId}(여기서 방법이 궁급합니다) WHERE B.USER_ID=E.USER_ID
1. 위 처럼 조인이 겹칠 경우 위에 제가 한 방식이 DATA가 소수일때는 값은 똑같이 나오는데 만약 대량의 DATA가 있을 경우 값의 정확도에 의문이 있습니다. 2. table 조인 방법은 알겠지만 변수로 조건받는건 생소해서 질문드립니다. 3. B.USER_ID=E.USER_ID 조건일 경우 저는 평소 밑에 WHERE 구문만 작성했는데 구글검색해보면 INNER JOIN 을 사용하는거 같아서 결과 값이 다르게 나오는지 질문드립니다. DATA가 적을 경우는 값은 비슷하게 나와서 어떤 방식이 옳은건지 궁금합니다.
-- 올려 주신 이상한 원본 쿼리 그대로 ANSI SQL 로 옮겨 보면 -- B.USER_ID(+) = #{loginId} 조건에서의 (+) 는 무시하면 됩니다. -- MySQL -- SELECT a.systm_id FROM a LEFT OUTER JOIN c ON a.systm_id = c.systm_id LEFT OUTER JOIN d ON c.system_id = d.system_id CROSS JOIN b INNER JOIN e ON b.user_id = e.user_id WHERE b.user_id = #{loginId} ;