join한 값 뿐만 아니라 그 해당되는 테이블에 있는 값 모두 출력하고 싶습니다

join한 값 뿐만 아니라 그 해당되는 테이블에 있는 값 모두 출력하고 싶습니다

QA

join한 값 뿐만 아니라 그 해당되는 테이블에 있는 값 모두 출력하고 싶습니다

본문


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
LEFT 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문 지적 부탁드립니다.

이 질문에 댓글 쓰기 :

답변 2

아래와 같이 되지 않을까요? 오타가 있을 수 있습니다.

 

컬럼에 서브쿼리를 쓰는 것은 성능에 영향이 있습니다.

그러므로 페이징 처리로 데이터를 줄여주셔야 합니다.

 


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

 

SELECT 
(SELECT COUNT(*) FROM payment AS C WHERE C.state = 'ready' AND  C.member_id=A.member_id) as ready_pay ,
(SELECT COUNT(*) FROM payment AS D WHERE D.state = 'paid' AND  D.member_id=A.member_id) as paid_pay,
A.*  
FROM member as A
LEFT JOIN payment as B
ON A.member_id = B.member_id GROUP BY A.member_id
답변을 작성하시기 전에 로그인 해주세요.
전체 723
QA 내용 검색
filter #sql ×

회원로그인

(주)에스아이알소프트 / 대표:홍석명 / (06211) 서울특별시 강남구 역삼동 707-34 한신인터밸리24 서관 1404호 / E-Mail: admin@sir.kr
사업자등록번호: 217-81-36347 / 통신판매업신고번호:2014-서울강남-02098호 / 개인정보보호책임자:김민섭(minsup@sir.kr)
© SIRSOFT