2013-08-22 35 views
0

我有这些表和数据..列出员工姓名与自己当前的工作/部门(表职员LEFT JOIN表Department_Staff)

staff 
(id, name, current_department_id) 
1, "John", 1 
2, "Matt", 1 

department 
(id, name) 
1, "Sales" 
2, "Support" 

designation 
(id, name) 
1, "Sales Exac" 
2, "Sales Manager" 
3, "Support Exec" 

department_staff 
(department_id, staff_id, start_year, end_year, designation_id) 
1, 1, 2005, 2006, 1 
1, 1, 2007, 2008, 2 
2, 2, 2007, 2008, 3 

现在,我想列出他们目前的名称/部门所有员工的。

我用这个语法

SELECT Name=s.name, 
        Department=d.name, 
        JSTART=ds.start_year, JEND=ds.end_year, 
        Designation=j.name FROM 
      staff s 
        LEFT JOIN department d ON d.id = s.current_department_id 
        LEFT JOIN department_staff ds ON ds.staff_id = s.id 
        LEFT JOIN designation j ON j.id = ds.designation_id 

但结果显示所有约翰的工作经历。我只想为约翰和其他人提供最新的工作。这条语句产生相同的结果如上

SELECT Name=s.name, 
         Department=d.name, 
         JSTART=ds.start_year, JEND=ds.end_year, 
         Designation=j.name FROM 

FROM department_staff ds 
LEFT JOIN department d ON d.id = ds.department_id 
LEFT JOIN staff s ON s.id = ds.staff_id 
LEFT JOIN designation ON j.id = ds.designation_id 

//边注:写这个点之后,似乎我不需要current_department_id存储在表中的工作人员,因为我可以在表department_staff。

我重复我的问题:我如何列出我的员工与他们的最新工作指定和部门?

谢谢你的时间。

回答

0

尝试:

SELECT b.name "Name", 
    c.name "Department", 
    start_year "JSTART", 
    end_year "JEND", 
    d.name "Designation" 
FROM dep_staff a, 
    staff b, 
    dep c, 
    desig d 
WHERE start_year = 
       (
        SELECT MAX(start_year) 
        FROM dep_staff e 
        WHERE a.staff_id=e.staff_id 
        AND  start_year < end_year 
       ) 
AND  start_year < end_year 
AND  a.dep_id = c.id 
AND  a.staff_id = b.id 
AND  a.desig_id = d.id 
+0

注:这会给你最新的工作档案资料。不是目前的! – Meet

+0

谢谢。效果很好! – Iyas

相关问题