쿼리질문입니다. 0 2 1,644

by stylebox [SQL Query] [2013.03.30 11:40:46]



현재 3개의 테이블이 있습니다.

tb_1
tb_2
tb_3

tb_1은 주소록 카테고리이구요
tb_2는 주소록이구요
tb_3은 주소록이 등록된 카테고리입니다..

주소록 카테고리는 개인이 주소록 카테고리를 생성
주소록은 주소를 생성
주소록 등록된 카테고리는 주소를 등록할때 주소록이 포함할 카테고리를 생성합니다.

tb_1
gid 그룹번호
gname 그룹명
user_id 사용자아이디

tb_2
cid 주소번호
user_id 사용자아이디
 cname 주소명
 email 메일주소
tel 전화번호
memo 메모

tb_3
pid 글번호
user_id 사용자아이디
cid 주소번호
gid 그룹번호


주소를 등록할때 그룹을 1,3 이렇게 선택을 한다면

cid   user_id  cname   email
1    test   test    test@name

pid  user_id  cid  gid
1   test   1    1,3

이렇게 저장이 되는데요

리스트를 뽑을때 
주소글번호 1에 그룹이 1,3
이므로 
tb_1가 조인해서 1,3에 해당하는 그룹명을
가져와서 리스트 그룹명에 표시를 해줄려고 합니다.


select
 a.cid, a.user_id, a.cname, a.email,
 (select c.gname from tb_1 c where c.gid=b.cid)
from tb_2 a, tb_3 b
where a.cid=b.cid

이런방식으로 쿼리를 했는데 
리스트목록에 
1,3이 한번에 안나오고 1,3이 하나씩 출력이 되네요.

이런경우 어떻게 쿼리를 날려야될지 
도움좀 부탁드립니다.

질문이 부족할수 있으니 이해 부탁드릴꼐요
오늘도 화이팅하세요


 
by 아린 [2013.03.30 12:26:23]
테이블간의 PK 가 어떻게 되나요?

그리고 쿼리중의   

(select c.gname from tb_1 c where c.gid=b.cid)   요부분은 좀 이상하네요.

 c.gid  => tb_1 테이블의 그룹번호
 b.cid  => tb_3 테이블의 주소번호  

이 두개는 조인의 연결고리가 아닌것 같은데요.
 

tb_3 테이블의 gid (그룹번호) 컬럼과 조인을 해야되지않나요.
      (현재 
tb_3 테이블의 gid 값은 그룹번호가 다중으로 들어가네요)

by 아린 [2013.03.30 13:40:35]
SELECT t3.cid, t3.user_id, t2.cname, t2.email
     , LISTAGG(t1.gname, ',') WITHIN GROUP(ORDER BY lv) gname
  FROM (SELECT pid, user_id, cid
             , REGEXP_SUBSTR(gid, '[^,]+', 1, lv) gid, lv 
          FROM tb_3 t3
             , (SELECT LEVEL lv FROM dual CONNECT BY LEVEL <= 10)
         WHERE LENGTH(t3.gid) - LENGTH(REPLACE(t3.gid, ',')) + 1 >= lv
        ) t3, tb_1 t1, tb_2 t2
 WHERE t3.gid = t1.gid
   AND t3.cid = t2.cid
   --AND t3.user_id = t3.user_id   
 GROUP BY t3.cid, t3.user_id, t2.cname, t2.email 
댓글등록
SQL문을 포맷에 맞게(깔끔하게) 등록하려면 code() 버튼을 클릭하여 작성 하시면 됩니다.
로그인 사용자만 댓글을 작성 할 수 있습니다. 로그인, 회원가입