2013-07-18 4 views
1

이 질문에 대한 답변이 수천 번이나 있었지만이 모든 변형이 작동하지 않습니다.MySQL이 다른 테이블의 일치하는 레코드 수를 합산합니다.

내가 가진 것은 2 개의 테이블입니다. 첫 번째 테이블에는 모든 결과를 표시하고 "어디에서"또는 아무 것도 표시하지 않으려합니다.

두 번째 테이블 ID를 첫 번째 테이블과 일치 시키려면 여러 행을 참조하여 번호를 계산할 수 있습니다.

ID - name 
1 - one 
2 - two 
3 - three 
4 - four 

을 그리고 두 번째 테이블은 내가 지금처럼 그들을 결합하려는이

ID - REF 
1 - 1 
2 - 1 
3 - 2 
4 - 2 
5 - 3 
6 - 3 
7 - 4 
8 - 4 

같다 :

그래서 첫 번째 테이블은 다음과 같이 말할 수 있습니다

ID - name - count 
1 - one - 2 
2 - two - 2 
3 - three- 2 
4 - four - 2 

나는 하위 쿼리, 왼쪽 조인, 오른쪽 조인, 내부 조인, 하위 쿼리 조인, 그룹화 및 10 회 중 9 회를 사용하여 시도했다. 20 회 나가야하는 1300 개의 결과 중 첫 번째 ID의 결과. 나머지는 잘못된 수와 이름 만 얻습니다.

나는 이것이 MySQL 101이라고 생각하지만 여러 변형을 시도하고 아무 것도 떠오르지 않으면 내가 놓친 뭔가가 있어야한다고 느낍니다.

정확히 같은 상황 (2 시간 동안보고 정확히 아무것도 작동하지 않는 질문)으로 이동하게되어 기쁠 것입니다. 또는이 방법의 논리를 지적하는 간단한 쿼리입니다. 감사합니다. 대답하는 사람에게 다가 가면 당신은 내 하루를 보냈을 것입니다.

추가 정보가 필요하면 알려주세요. 의도적으로 쿼리를 생략했기 때문에 여러 번 적용 해 보았 기 때문에 관련성이별로 없었습니다 (시도한 모든 쿼리를 나열해야 함). 멀리 스크롤까지)

나는 첫 번째와 답을 테스트 해 본 결과이 컨텍스트에서 작동하는 것처럼 보였으므로 내 대답을 확장 할 것이므로 질문은 "대답"이므로 응답이 없으면 확장 일뿐입니다. 대답을 다음과 같이 닫습니다 :

SELECT t.id, t.name, count(*) AS suppliers 
FROM #__tiresku AS t 
LEFT JOIN #__mrsp AS m ON t.name = m.tiresku_id 
GROUP BY t.id, t.name 

확장은 내부 조인입니다. 나는 다른 테이블을 가지고 있습니다. 에서 더 많은 목록입니다, 그것은 ID와 이름을 가지고 있고 그게 다예요, 그 ID 대신에 "이름"을 얻기 위해 그 테이블을 참조합니다.

외래 키 또는 다른 것과 같이 조인 할 때 더 좋은 옵션이있을 수 있습니다.

나는이 이것은 INNER JOIN #__brands AS b ON t.brand = b.id

Worked with a sub query rather then join

답변

5

가입 선택 b.name AS brand_name

그리고 추가 한 기본 집계와 조인 요청으로

select t1.id, t1.name, count(*) as `count` 
from table1 t1 join 
    table2 t2 
    on t1.id = t2.ref 
group by t1.id, t1.name; 
+0

나는 그것을 시험해보고 어떻게되는지 알려줄 것이다. 작동하지 않는 경우이 예제가 작동하지 않는 이유를 보여주기 위해 질문을 업데이트합니다. –

+0

문제의 근본 원인을 발견 한 후에 제 질문을 확장하겠습니다. –

0

이 예제는 않습니다 두 번째 테이블에없는 레코드를 첫 번째 테이블에 포함시키지 마십시오. 가능할 수도 있고 암시적인 레코드 일 수도 있습니다. 디.

"첫 번째 테이블에 존재합니다"와 상관없이 두 번째 테이블에 카운트가 중첩 된 테이블을 만드는 경향이 있습니다.

첫 번째 테이블은 설명의 기본 디코딩이므로 두 번째 테이블의 값 개수를 먼저 계산합니다.

select ID, name, coalesce('count',0) 

from (select ref, count(*) as 'count' 
     from table2 
     group by ref) as T2 

right join table1 

on ref = ID;  
관련 문제