2012-11-04 6 views
0

쿼리를 나타내는 데 약간의 어려움이 있습니다. 나는 SQL 문을 변환 할 문은 다음과 같습니다 지금까지 올 성공은 무엇MySQL : 여러 테이블에서 Join

select count(*) 
from assigned, tasks 
where 
assigned.id_task = 1 
or 
(assigned.id_project=tasks.id_project and tasks.id=1) 

은 다음과 같습니다 그러나

select count(*) 
from assigned a 
left join projects p 
    on p.id=a.id_project 
left join tasks t 
    on t.id_project=p.id 
where (a.id_task=1 or t.id=1) 

, 두 번째는 올바른 결과를 반환하지 않습니다. 내가 뭘 놓치고 있니?

+0

예상되는 결과는 무엇입니까? 두 번째 쿼리 결과는 어떻게 잘못됩니까? 이 프로젝트 테이블의 출처는 어디입니까 (첫 번째 선택 항목이 아님)? 테이블은 어떻게 정의되어 있습니까? –

+0

첫 번째 문은 이미 SQL 문입니다. 어떤 방법으로 "* 변환"하시겠습니까? – eggyal

+0

@eggyal 괜찮습니까? 테이블에서 직접 선택하는 것과 비교하면 조인이 빠릅니까? – Andrew

답변

1

추가 테이블과 다른 조인 조건을 사용하기 때문에 두 번째 쿼리가 다른 결과를 반환한다는 것은 놀라운 일이 아닙니다. 첫 번째는 내부 조인을 사용하고 두 번째는 왼쪽 조인을 사용하기 때문에 두 번째 선택에서 첫 번째 행만큼의 행을 전달해야하지만,

첫 번째 쿼리는 조인도 사용합니다. 암묵적으로 표현 된 것입니다.

+0

입니다. 첫 번째 쿼리와 동일한 결과를 반환하는 쿼리에 대한 질문에 대답했습니다. 감사합니다. – Andrew

1

문제가있는 곳을 파악했습니다. 정확한 join 쿼리는 다음과 같습니다.

+0

솔루션을 찾은 것을 기쁘게 생각합니다. –