2011-02-07 3 views
0

employeedepartment, department 2 테이블, dpt1 및 dpt2, 12 명의 직원, 6 각 부서 및 4 개의 테이블이 있다고 가정 해 봅시다. 두 부서에 속한다. 어떻게하면 mysql 쿼리를 사용하여 dpt2에만 속하고 dpt1에 속하지 않는 직원을 찾을 수 있습니까?특정 부서 구성원을 선택하는 mysql 쿼리를 작성하는 데 도움이

+0

사용 "dep1, DEPT2"값을 가진 직원이 많은 관계, 아니면 그냥 필드에 당신이 많은과 별도의 테이블이 할 수있는? – bensiu

+0

dept1, dept2 값이있는 필드 .... – Bluemagica

+0

너무 현명하지 않습니다 ... 변경 사항을 고려합니까? – bensiu

답변

0
SELECT employee.* 
FROM employee 
INNER JOIN employee_belongs_to_departments 
WHERE employee.id = employee_belongs_to_departments.employee_id 
AND employee_belongs_to_departments.department_id = 'dpt2' 
AND employee.id NOT IN (
    SELECT DISTINCT ebtd2.employee_id 
    FROM employee_belongs_to_departments ebtd2 
    WHERE ebtd2.employee_id = employee.id 
    AND ebtd2.department_id = 'dpt1' 
) 
0

이런 상황에서 일반적인 접근 방식은 세 번째 "연결"테이블, employeeDepartment 같은라는 뭔가를하는 것입니다. 이것이 바로 스토리지 엔진 (즉, 할 어려운하지 않는 것이)를 사용 할 것을 요구하지만

CREATE TABLE employeeDepartment (
    employee INT UNSIGNED NOT NULL, 
    department INT UNSIGNED NOT NULL, 
    PRIMARY KEY (employee, department) 
) 

다음은 해당 테이블의 기본 키에 employeedepartment 외래 키를 확인합니다.

이렇게하면 여러 가지 일을 훨씬 쉽게 할 수 있습니다 (한 열에 값 목록 저장).

그런 다음, 당신이 직원과 부서 간의 연결을 설계하는 방법

SELECT 
    eD1.employee 
FROM 
    employeeDepartment AS eD1 
    LEFT JOIN employeeDepartment AS eD2 ON 
     eD1.employee = eD2.employee AND 
     eD2.department = 'dpt2' -- replace with appropriate integer 
           -- if using integers as I suggested 
WHERE 
    eD1.department = 'dpt1' AND -- same comment applies 
    eD2.employee IS NULL 
관련 문제