2011-11-22 5 views
2

나는 이것을 명확하게 설명하기 위해 최선을 다할 것입니다. 나는 두 가지 일을 성취하려고 노력하고 있지만, 처음 일하는 것이 어려워서 올바르게 일합니다.Mysql - 여러 조인 된 테이블의 합계를 계산

여러 테이블에 대해 외래 키가있는 멤버 테이블이있는 스키마가 있습니다. 결국 나는 특정 회원에 대한 레코드가 있거나 없을 수도있는 약 10 개의 테이블을 그리게 될 것입니다. 나는 모든 수의 합계를 얻으려고 노력하고있다. 내 검색어는 다음과 같습니다.

SELECT (COUNT(tb1.member_id) + COUNT(tb2.member_id)) as total 
FROM members m 
LEFT JOIN table_1 tb1 ON tb1.member_id = m.member_id 
LEFT JOIN table_2 tb2 ON tb2.member_id = m.member_id 
WHERE m.member_id = 27 

여기서 27은 내가 작업 할 테스트 계정의 member_id입니다. 이것은 정확한 결과를 가져 오지 않으며 왼쪽 결합 때문에 믿을만한 결과를 얻지 못합니다. 모든 종류의 레코드가 두 개인 경우에도 총 8 개가됩니다. 왼쪽 조인 중 하나를 제거하면 예상 결과가 나타납니다.

누구든지이 작업을 어떻게 수행해야하는지 알려 줄 수 있습니까?

이것이 제 문제 중 하나입니다. 두 번째 문제는 이러한 경우 중 일부에서 각 결과가 1 또는 0으로 계산되기를 원할 것입니다. 즉 2 또는 3 개의 해당 레코드가있는 경우에도 마찬가지입니다. 부울처럼 결과를 캐스팅하는 것과 같은 것을 찾고 있었지만 아무것도 발견하지 못했습니다. 누구든지이 작업을 수행 할 수있는 방법을 제안 할 수 있습니까?

독서에 감사드립니다. 조언을 주시면 감사하겠습니다. 내가 잘못된 방법으로이 문제에 접근하고있을 수 있습니다, 다시 조언을 부탁드립니다. 내가 mysql을의 예술의 상태에 익숙하지 않은 오전에 있는데도

답변

1

내가 이런 확신 뭔가 작동입니다 :

SELECT 
(select COUNT(*) from table_1 = where member_id = m.member_id) 
+ 
(select COUNT(*) from table_2 = where member_id = m.member_id) 
as total 

FROM members m 
WHERE m.member_id = 27 
+0

직접 SELECT 절에 조건문을 사용할 수 있습니다 질문의 두번째 부분에 대한 [HTTP ://vikrant_labde.blogspot.com/2005/02/mysql-ifnull-if-case-when-then-then-else.html] 따라서 count> 0인지 여부를 확인하십시오. –

+0

대단히 감사합니다. 이것이 내가 찾고 있었던 것입니다. . bool 유형의 경우 내가 수행하려고했던 것을 선택합니다. – TheMethod

+0

도움을 주어서 기쁩니다. 향후 참조를 위해이 종류의 쿼리를 "상관 된 하위 쿼리"라고합니다. btw. 질문을 답변으로 설정하십시오. 감사합니다. –

관련 문제