Join
使用不相關的 where 子句連接兩個表
我有兩個表:(EMPAssignments)和(EMPloyees)。兩者都有一個員工 ID 列。
EMPAssignments 具有employeeid、assignment 和ftepercentage 列:
employeeid assignment ftepercentage emp001 sales 0.5 emp001 shipping 0.3 emp001 marketing 0.2 emp002 sales 0.2 emp002 shipping 0.7 emp002 marketing 0.1 emp003 sales 0.5 emp003 shipping 0.5 emp003 marketing 0.5
EMPloyees 具有員工 ID 列並已啟用
employeeid enabled emp001 1 emp002 1 emp003 1 emp004 0 emp005 1
如果 EMPAssignments 表中不存在,我希望我的查詢返回具有最高 FTEpercentage 的分配或空白分配。我應該有員工 1、2、3 和 5 的行,而不是 4。
在平局的情況下,我不在乎返回哪個分配,只要它只有一個,但每個活動的 Employeeid 應該總是有一行。
我對 SQL 真的不太了解,但我已經搜尋並嘗試了各種方法。
我可以使用它來獲取 EMPAssignments 表中每個員工 ID 的最高 ftepercentage。
SELECT "employeeid", MAX("ftepercentage") AS top_assignment from EMPAssignments group BY "employeeid"
我可以使用:
SELECT Employeeid FROM EMPloyees WHERE enabled !=0
返回已啟用的員工。
但我不知道如何加入這兩者,因為 emp004 和 emp005 在 EMPAssignments 中不存在。我的加入嘗試要麼返回所有活動employeeid 的所有分配,要麼返回EMPAssignments 表中那些employeeid 的最高百分比。
誰能指出我正確的方向?
提前致謝,
賬單
LEFT JOIN
一個子查詢獲取每個員工的最大 FTE,另一個獲取每個員工和 FTE 的最大(或最小,…)分配。SELECT e1.*, a4.* FROM employee e1 LEFT JOIN (SELECT a1.employeeid, max(a1.ftepercentage) ftepercentage FROM empassingments a1 GROUP BY (a1.employeeid)) a2 ON a2.employeeid = e1.employeeid LEFT JOIN (SELECT a3.employeeid, a3.ftepercentage, max(a3.assignment) assignment FROM empassignments a3 GROUP BY a3.employeeid, a3.ftepercentage) a4 ON a4.employeeid = e1.employeeid AND a4.ftepercentage = a2.ftepercentage WHERE e1.enabled = 1;