2013-11-26 1 views
1

나는 세 개의 테이블을 가지고 있는데 모두 공통 필드 (our_id)를 공유합니다.MySQL : 두 테이블에서 결과 가져 오기, 세 번째 테이블에서 일치 개수

our_id은 Table1의 기본 키입니다.

our_id 또한 표 2 및 표 3에 0 번 이상 존재합니다.

나는 our_id는 표 1과 표 2에 모두 존재하는 레코드를 선택하기를 원하지만 나는 또한 our_id는 표 3에서 발생 (또는 단지 our_id 존재 여부를 표 3에 관계없이) 얼마나 많은 시간을 계산해야합니다.

나는이 함께했다 :

SELECT Table1.*, Table2.*, COUNT(Table3.*) AS table3_count 
FROM Table1, Table2, Table3 
WHERE Table1.our_id = Table2.our_id 
AND Table1.our_id = Table3.our_id; 

...하지만 our_id는 할 수 없습니다 표 3에 존재하는 경우에만 결과를 반환합니다.

그래서 나는 시도 :

SELECT Table1.*, Table2.*, COUNT(Table3.*) AS table3_count 
FROM Table1, Table2, Table3 
WHERE Table1.our_id = Table2.our_id 
    AND (Table1.our_id = Table3.our_id 
     OR NOT EXISTS (SELECT * FROM Table3 
         WHERE Table1.our_id=Table3.our_id)); 

하지만 그건 그냥 실행 및 실행 ...

내가 our_id는 표 1과 표 2에 모두 존재하는 여전히 결과를 반환해야하고, 몇 번이나 말해 (또는 표 3에 있음).

미리 감사드립니다.

답변

2

Table3을 가져 오려면 LEFT JOIN을 사용해야합니다. LEFT JOIN은 왼쪽 테이블 (Table1)의 모든 행을 반환하고 오른쪽 테이블 (Table3)의 행을 일치 시키려고 시도합니다. Table3에 일치하는 행이 없으면 선택한 Table3 필드에 대해 NULL이 반환됩니다.

SELECT Table1.*, Table2.*, t3.count 
FROM Table1, Table2 
LEFT JOIN (SELECT our_id, COUNT(*) AS count FROM Table3 GROUP BY our_id) t3 
ON Table1.our_id = t3.our_id 
WHERE Table1.our_id = Table2.our_id 
+0

옳은 말처럼 들립니다. 나는 그것을 시험해 보았고 오류가 발생했다 :'# 1054 - 'on clause'에 'Table1.our_id'라는 알 수없는 열이 있지만 테이블과 필드가 분명히 존재한다. 지금!). – JoLoCo

+0

대소 문자가 정확합니까? 모든 테이블에 별명을 지정하여 문제를 해결하려고 할 수 있습니다. 'FROM Table1 t1, Table2 t2' 그리고 나서'ON t1.our_id = t3.our_id'를 사용하십시오. 나는 무엇이 잘못 될 수 있는지 전혀 모르지만, 아마 그 두 가지 중 하나가 도움이 될 것입니다. –

+0

아, 알 겠어! 나는'FROM' 라인에서 Table1과 Table2를 교환해야했습니다 (두 번째 라인은'FROM Table2, Table1'을 읽었습니다). 도와 주셔서 대단히 감사합니다. 정말 고맙습니다. – JoLoCo

관련 문제