2014-09-18 3 views
0

두 테이블 DEPARTMENT 및 BUDGET이 있습니다. BUDGET 테이블에 없더라도 모든 부서를 반환하고 싶습니다. 다음 쿼리를 사용하고 있지만 예상대로 작동하지 않는 것 같습니다. 절은 다음 내가 LEFT JOIN을 사용하고 있더라도 모든 기록을 반환하지 않습니다 어디에서 사용하는 경우왼쪽 조인은 모든 레코드 또는 없음을 반환합니다.

SELECT dept_name FROM department 
LEFT JOIN budget ON budget.dept_id = department.dept_id 
AND budget.division = 5 AND budget.year = 2015 

위의 쿼리는 모든 부서에서 부서뿐 아니라 부문 5를 반환합니다. 내가 도대체 ​​뭘 잘못하고있는 겁니까?

SQL 바이올린 내가 원하는 쿼리를 발견처럼 편집이 다시

이 보이는
http://sqlfiddle.com/#!2/d4b07/12

을 추가했습니다. 이것은 위에 게시 된 SQL fiddle에서 'Legal'중 하나의 결과를 반환하고 이것이 내가 원하는 것입니다.

SELECT DISTINCT D.name, B.budget_year FROM department D 
LEFT JOIN budget B ON D.ID = B.department_id 
AND D.division_id = B.division_id 
AND B.budget_year = 2015 
WHERE D.division_id = 11 
+0

'where' 절 대신'on' 절에'budget' 조건을 넣으십시오. –

+0

'where' 대신'on' 절에서 이미'budget'을 사용하고 있지만 작동하지 않습니다. –

+0

샘플 데이터와 원하는 결과로 질문을 편집해야합니다. 귀하의 질문에 일관성이 없습니다. –

답변

0

: 그들이 그렇게 상관없이 예산 테이블의 존재의 예산에없는 당신이 부서에게

시도를 얻을 경우에도

당신은 모든 부서를 원한다.

SELECT DISTINCT D.name, B.budget_year FROM department D 
LEFT JOIN budget B ON D.ID = B.department_id 
AND D.division_id = B.division_id 
AND B.budget_year = 2015 
WHERE D.division_id = 11 
1

문제는 부서 ID가 부서 테이블에 없다는 것입니다. 해당 테이블에 부서 ID가있는 경우 where 절에서 해당 ID를 사용하십시오. 다음 쿼리는 일

SELECT dept_name FROM department 
LEFT JOIN budget ON budget.dept_id = department.dept_id and budget.division = department.division AND budget.year = 2015 
WHERE department.division = 5 
+0

오하이오 부서 표에 부서 ID가 있습니다. 그 사실을 완전히 잊었습니다. 이제 내가 department.division = budget.division과 같은 조건에서도 이것을 사용하면 레코드를 가져 오지 않습니다. –

+0

검색어와 함께 답변이 업데이트되었습니다. 귀하의 검색어가 어떻게 보이나요? –

+0

나는이 쿼리를 사용했고 디비전 5에는 레코드가 하나만 포함되어 있어도 모든 레코드를 가져 왔습니다. –

관련 문제