Join

使用不相關的 where 子句連接兩個表

  • June 29, 2018

我有兩個表:(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;

引用自:https://dba.stackexchange.com/questions/210905