2016-06-28 6 views
0

이것은 내가 처리중인 과제의 일부입니다. 나는 6 개 테이블여러 테이블에서 데이터를 선택하고 mysql에서 그룹화

  • EMPLOYEE
  • DEPARTMENTS
  • DEPT_EMP
  • TITLES
  • SALARIES
  • DEPT_MANAGER
,536가있는 경우, 데이터베이스가 COMPANY라는 이름의이

이제 각 부서의 엔지니어 수를 나열해야합니다.

내가 다음 쿼리를 내놓았다 :

select departments.dept_name as Department_name, 
     count(titles.title) as No_Of_Engineers 
from departments, 
    titles 
where titles.emp_no = dept_emp.emp_no 
    and dept_emp.dept_no = departments.dept_no 
    and titles.title like "% engineer %" 
group by departments.dept_no; 

그러나이

알 수없는 열 나에게 오류를 제공 'dept_emp.emp_no'에서 'where 절'

그러나 내 dept_emp 테이블에 emp_no이라는 열이 있습니다. 누구든지이 오류를 볼 수 있습니까? 당신은이 dept_emp에 가입 누락

+0

from 절에 dept_emp가 없습니다. 나는. WHERE 절은 3 개의 테이블이 연관되어있는 것처럼 보이지만 2 개의 테이블 만 선택하면됩니다. – jarlh

+0

'... from departments, titles, dept_emp ...'from 절에'dept_emp' 테이블이 없어야합니까? – 1000111

+0

@jarlh 의무입니까? 왜냐하면 내 결과에'emp_no '를 원하지 않기 때문입니다. –

답변

1

사전에 감사 :

select departments.dept_name as Department_name, 
     count(titles.title) as No_Of_Engineers 
from departments 
    INNER JOIN dept_emp 
     ON(dept_emp.dept_no = departments.dept_no) 
    INNER JOIN titles 
     ON(titles.emp_no = dept_emp.emp_no) 
WHERE titles.title like "% engineer %" 
group by departments.dept_no; 

은 또한, 가입 암시 적 구문의 사용을 피하기 (쉼표로 구분) 적절한 구문을 사용 해보세요 조인 수정 된 것 조인.

+0

답변 해 주셔서 감사합니다. 암시 적 조인을 피할 필요가있는 이유를 설명 할 수 있습니까? –

+0

그들은 읽을 수 없으며 앞으로 실수로 이어질 수 있습니다! 아마도 2/3 테이블을 조인 할 때 여전히 이해할 수 있지만 다른 프로그래머가 6 개 이상의 테이블을 포함하여 작성하지 않은 코드를 작업하려고하면 이해하기가 어려울 것입니다. 그리고 LEFT JOIN의 플러스 기호에 대해 이야기하게하지 마세요. 나쁜 습관이고 올바른 구문에 익숙해 져야합니다. – sagi

+0

아마도 잘못된 이름을 사용했기 때문입니다. 'departments' 테이블을보십시오.'department_number' 컬럼의 이름은 무엇입니까? – sagi

관련 문제