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


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

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

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

예를들어

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

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

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

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

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

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

  • 2016년 04월 20일에 작성됨
    웹개발자

조회수 261


1 답변


좋아요
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 ...
  • 2016년 04월 22일에 작성됨
    리눅스(유닉스) 기반의 시스템에서 웹 서비스를 개발하고 있습니다.

  • 감사합니다! 역시 안되는 거였군요 ㅎㅎㅎ;;    swiftruby   2016.4.24 14:28     

로그인이 필요한 기능입니다.

Hashcode는 개발자들을 위한 무료 QnA사이트 입니다. 작성한 답변에 다른 개발자들이 댓글을 작성하거나 좋아요/싫어요를 할 수 있기 때문에 계정을 필요로 합니다.
► 로그인
► 계정만들기
Close