쿼리문 질문좀 부탁드립니다. 0 3 790

by 꾸꾸까까 [SQL Query] JOIN 중복쿼리 [2020.02.25 19:45:27]


안녕하세요.

한번에 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회용으로 이렇게 출력이 가능한지가 궁금합니다.

만약 가능하다면, 쿼리문을 어떻게 쳐야되는건지좀 알려주시면 감사하겠습니다..

by 마농 [2020.02.25 20:06:25]
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

 


by 꾸꾸까까 [2020.02.26 11:18:14]

답변 감사합니다. 그런데 UNION ALL을 쓰면 일일이 모든 행을 입력해야되지 않나요?

행이 너무많아서... 이런경우엔 어떻게 해야되나요.. ㅠㅠㅠ


by 마농 [2020.02.26 11:23:00]

UNION ALL 하라는 의미가 아닙니다.
WITH 문은 직접 쿼리를 테스트 해보기 위해 만든 것입니다.
조인을 어떻게 하는지? GROUP BY 를 어떻게 하는지? 를 보시면 됩니다.

댓글등록
SQL문을 포맷에 맞게(깔끔하게) 등록하려면 code() 버튼을 클릭하여 작성 하시면 됩니다.
로그인 사용자만 댓글을 작성 할 수 있습니다. 로그인, 회원가입