안녕하세요.
한번에 2개의 테이블에서 정보를 가져오려고 하는데, 이게 단순 JOIN문으로 해결이 안되서 질문글올려봅니다.
먼저 2개의 테이블이 각각 다음과 같이 이루어져있습니다. (실제론 안 이렇지만 예시가 이렇습니다.)
name 테이블
id | index | name |
100 | 1 | 김철수 |
101 | 2 | 김영희 |
detail 테이블
id | index | detail |
100 | 1 | 디테일 블라블라 |
101 | 2 | 디테일 블라블라 |
100 | 3 | 디테일 블라블라 |
100 | 4 | 디테일 블라블라 |
100 | 5 | 디테일 블라블라 |
101 | 6 | 디테일 블라블라 |
101 | 7 | 디테일 블라블라 |
101 | 8 | 디테일 블라블라 |
100 | 9 | 디테일 블라블라 |
요약하자면.
1. name 테이블엔 간단한 이름의 정보만 있음. id를 통해서 다른 테이블의 데이터에 접근이 가능함.
2. SELECT 문으로 출력할 때, detail 테이블에서 내가 입력한 id의 갯수(count) 가 나오게 하고싶습니다.
그러니까.. 예를들어서
제가 원하는 결과는
id | index | name | count |
100 | 1 | 김철수 | 5 |
101 | 2 | 김영희 | 4 |
이렇게 나오도록 하고싶습니다.
이렇게 하려면 테이블 구조 자체를 수정해야하는건지(name 테이블에 없던 count 열이 추가되었기 떄문에), 아니면 SELECT문 1회용으로 이렇게 출력이 가능한지가 궁금합니다.
만약 가능하다면, 쿼리문을 어떻게 쳐야되는건지좀 알려주시면 감사하겠습니다..
WITH name AS ( SELECT 100 id, 1 idx, '김철수' name FROM dual UNION ALL SELECT 101, 2, '김영희' FROM dual ) , detail AS ( SELECT 100 id, 1 idx, '디테일 블라블라' detail FROM dual UNION ALL SELECT 101, 2, '디테일 블라블라' FROM dual UNION ALL SELECT 100, 3, '디테일 블라블라' FROM dual UNION ALL SELECT 100, 4, '디테일 블라블라' FROM dual UNION ALL SELECT 100, 5, '디테일 블라블라' FROM dual UNION ALL SELECT 101, 6, '디테일 블라블라' FROM dual UNION ALL SELECT 101, 7, '디테일 블라블라' FROM dual UNION ALL SELECT 101, 8, '디테일 블라블라' FROM dual UNION ALL SELECT 100, 9, '디테일 블라블라' FROM dual ) SELECT a.id , a.idx , a.name , COUNT(b.id) cnt FROM name a LEFT OUTER JOIN detail b ON a.id = b.id GROUP BY a.id, a.idx, a.name ORDER BY id ; -- http://gurubee.net/lecture/1032 -- http://gurubee.net/oracle/sql