2011-02-07 35 views
0

比方說,我有2個表,employeedepartment,department有2個部門,dpt1和dpt2,有12個員工,6個部門和4個部門屬於這兩個部門。我如何使用mysql查詢來查找僅屬於dpt2而不屬於dpt1的員工?請幫我寫一個mysql查詢來選擇特定部門的成員

+0

你如何設計員工和部門之間的連接,你有單獨的表多對多的關係,或與「DEP1,DEPT2」價值員工只是場? – bensiu 2011-02-07 13:21:29

回答

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