개발 Q&A

제목 join한 값 뿐만 아니라 그 해당되는 테이블에 있는 값 모두 출력하고 싶습니다
카테고리 DB
글쓴이 AMKORDB 작성시각 2017/01/23 14:06:12
댓글 : 5 추천 : 0 스크랩 : 0 조회수 : 10131   RSS
SELECT * FROM member IN
( 
SELECT 
COUNT(case when (B.state = 'ready') then 1 end ) as ready_pay , 
COUNT(case when (B.state = 'paid') then 1 end ) as paid_pay 
FROM member as A
INNER JOIN payment as B
ON A.member_id = B.member_id 
)

 

 

sql문 보시면

 

다른테이블와 JOIN 해서 B.state = 'ready' 한 count값 (필드 ready_pay 생성)과

B.state = 'paid' 한 count 값 (필드 paid_pay 생성)을 ON A.member_id = B.member_id 통해 출력 하게 되었습니다.

 

그러나 이것뿐만아니라

 

동시에 

 

member 안에있는 데이터 모두 출력하고 싶은데요.

 

ON A.member_id = B.member_id 이 조건 때문에 나머지 데이터 값은 출력이 안되서

 

서브쿼리 통해 할려고 하는데 이것이 맞는것인지 알고싶습니다.ㅠ.ㅠ

 

고수님들 ㅠ,ㅠ sql문 지적 부탁드립니다.

 다음글 코드이그나이터를 위한 최적의 도구는? (7)
 이전글 제가 웹서버만들고 싶은데요 (2)

댓글

배강민 / 2017/01/23 14:13:20 / 추천 0

위 쿼리가 에러없이 실행이 되나요?

IN 절 안의 서브쿼리에 select 필드가 2개라서 에러날듯한데요? 아닌가 흠

SELECT
COUNT(case when (B.state = 'ready'then end as ready_pay ,
COUNT(case when (B.state = 'paid'then end as paid_pay,
A.*
FROM member as A
INNER JOIN payment as B
ON A.member_id = B.member_id

위를 원하시는게 아닌가 싶네요. 아니시라면 모르겠네요.

JOIN을 한다고 JOIN한 필드만 나오는건 아닙니다.

AMKORDB / 2017/01/23 14:27:26 / 추천 0
member 테이블에 총 12 행 이 있는데 
문제는 1행만 나옵니다 ㅠ,ㅠ
배강민 / 2017/01/23 14:31:48 / 추천 0

가 열이 아니라 행인건가요.

payment과 매칭되는것만이 아니라 다른것도 나오고 싶으신거죠?

그렇다면 left join을 알아보셔요

AMKORDB / 2017/01/23 14:32:34 / 추천 0

SELECT 
COUNT(case when (B.state = 'ready') then 1 end ) as ready_pay ,
COUNT(case when (B.state = 'paid') then 1 end ) as paid_pay,
A.*  
FROM member as A
LFTE JOIN payment as B
ON A.member_id = B.member_id

 

이렇게 해보았지만 ㅠ,ㅠ 1행만 나오네요 ㅠ,ㅠ

kaido / 2017/01/23 16:03:58 / 추천 0
SELECT 
COUNT(case when (B.state = 'ready') then 1 end ) as ready_pay ,
COUNT(case when (B.state = 'paid') then 1 end ) as paid_pay,
A.*  
FROM member as A
LFTE JOIN payment as B
ON A.member_id = B.member_id

GROUP BY A.member_id

 

 

group by 사용 법은 2가지 입니다.

유일성 있는 데이터를 추츨 하기 위해 중복 데이터 접어두기 방법과

합쳐진 데이터를 유일성 있게 보이기 위해 펼쳐두기 방법.

 

count 와 같이 사용 하면 펼치는 기능이 있습니다.

 

그리고 제가 지금 알려드린것은 제가 보기엔 원하시는 결과물에 정답이 아닙니다.

ready_pay 와 paid_pay 는 서브 쿼리로 해결 하셔야 할 것입니다.

 

select 절에서 사용 하는 서브 쿼리에 대해서 한번 알아보시면 풀리실 것입니다.