필드의 값에 따라 다른 테이블 조인 가능 여부

조회수 4310회

테이블 쿼리를 짤 일이 많아지고 있는데요

혹시 가능한지 여부에 대해 궁금해서 질문 남깁니다.

다소 터무니 없을수도 있을텐데요 (제가 아는 지식으로는)

예를들어

a라는 테이블이 있고 b라는 테이블이 있고, a의 필드하나와 b의 idx와 조인이 되어 있습니다.

지금은 a - b의 구조인데 다른 정보가 필요해서 a - b - c 의 형태로 조인을 걸어야 할 경우가 있다고 가정합니다.

문제는 a - b - c 관계 뿐만 아니라 a - b - d 처럼 다른 테이블을 조인을 할 경우가 있다고 쳤을때

b의 필드중 type 이라는 것을 만들고 0, 1, 2 등으로 구분을 하고 그 값에 따라서 다른 테이블을 조인할 수 있을지 궁금합니다.

제 상식으로는 말도 안되는 거 같은데 저게 가능하면 타입에따라 다른 테이블 조인을 하니 릴레이션이 많이 간결해 질거 같다는 생각이 들어서요

가능하다면 힌트라도 부탁드립니다!

  • (•́ ✖ •̀)
    알 수 없는 사용자

1 답변

  • 질문의 의도가 테이블의 레코드의 값에 따라 JOIN 하는 테이블을 변경하는 것이라면, 안될거라고 생각되네요.

    비슷하게 하는 방법은 다음과 같습니다.

    a - b - c 와 a - b - d 의 에서 c와 d는 a-b에 대해서 공통된 partial key를 가져야 할 것으로 보입니다.

    SELECT ... FROM a - b LEFT JOIN c ON ... LEFT JOIN d ON ...
    

    모든 타입에 대해 조회할 경우 위와 같이 연관된 모든 테이블을 LEFT JOIN 해서 조회해야 하겠네요. 그러면 어떤 레코드는 c의 컬럼은 존재, d의 컬럼은 NULL로, 어떤 레코드는 c의 컬럼은 NULL, d의 컬럼은 존재하는 형태로 나타나게 될 겁니다.

    특별히 특정 타입에 대해 조회할 경우에는 다음과 같이 해당 타입에 대한 테이블만 조인하면 될 것 같네요.

    SELECT ... FROM a-b LEFT JOIN <c or d> ON a-b.type=<0,...> and ...
    

답변을 하려면 로그인이 필요합니다.

프로그래머스 커뮤니티는 개발자들을 위한 Q&A 서비스입니다. 로그인해야 답변을 작성하실 수 있습니다.

(ಠ_ಠ)
(ಠ‿ಠ)