1:N의 관계를 갖는 2개의 테이블이 있을때
(뭐 쉽게 말씀드려서 폴더나 트리구조라고 볼수 있겠습니다.)
다음과 같이 그룹별로 출력을 하려면
보통 쿼리를 어떻게 작성들 하고 계신지 궁금합니다.
A 테이블 : (id integer, name long varchar)
B 테이블 : (id integer, result varchar(20))
테이블 관계 : 1:N = A:B
-----------------------------------------
A.id, A.name
-- B.result
-- B.result
-- B.result
A.id, A.name
-- B.result
A.id, A.name
-- B.result
-- B.result
-- B.result
-----------------------------------------
제가 생각할 수 있는 범위에서 쿼리는
1. 조인으로 한번에 가져와서
프로그램단(웹)에서 id값이 바뀌면 그룹출력을
변경한다.
A.id, A.name, B.result
A.id, A.name, B.result
A.id, A.name, B.result
:
이런 결과셋에서 A.id 값이 바뀌면 다음 그룹 출력을 하는 방식
(이방식은 A.id, A.name 필드크기가 클때
레코드셋 자체가 커져서
결과를 받아오는 시간이 커지는 단점이
있을것 같습니다.)
2. A 테이블에서 원하는 결과셋만
구한후에 프로그램단에서 A 테이블의 id 값으로
동적 쿼리를 작성하여 B에 in
연산으로 가져온다.
--> select id, name from A
--> (id =1 or id=2 or id=3 or id=4) ===> 이런 동적 쿼리를
생성한후
--> select id, result from B where id in (동적쿼리)
이런순으로 처리해서 프로그램단에서 결과셋을 조합한다.
(이방식은 쿼리문이 좀 지저분해지고 두번의
쿼리 횟수와
가변쿼리로 인해 캐싱도 안될것이라는
점..
그리고 인덱스를 타지못하는 in 연산을
써야한다는 점....)
제가 생각할 수 있는 방법은 여기까지 입니다.
보통 개발하시는 분들께서는 이럴때 어떻게 쿼리하시는지
궁금합니다.
|