4

我意识到这可能没有意义,所以让我试着解释一下:

我有两个包含以下列的表(只是相关的):

positTraining (positID, trainID)
empTraining (empID, trainID)

positTraining表包含一个列表position ids以及任何training ids职位要求。

empTraining表包含员工已完成的employee ids任何当前的列表。training ids

我只想选择training ids员工尚未完成的职位所需的职位。

因此,如果员工 A 已完成培训 1 和 3,但职位 X 需要培训 1 和 2,我想选择trainID缺少的培训 (2)。

我希望这是有道理的。

我已经用一百万种不同的方式搜索了谷歌,并在这里检查了 SO,但由于这个额外的要求,找不到有效的答案:

我只想选择trainIDs基于empID. 这背后的原因是由于empID=2可能有正确的匹配但emp=1可能没有。

我整个下午最接近的是使用以下内容:

select positID, trainID
from positTraining
except
select empID, trainID
from empTraining

返回:

positID  |  trainID
1        |  2

这是正确的,但只是因为当前的记录。一旦另一名员工以正确的匹配放入数据库,这将停止工作。

我尝试过使用几种不同的方法:



存在的 联接

我敢肯定这比我做的要容易,但我就是想不通。

感谢您提供的所有帮助,我很乐意添加任何额外的细节,请告诉我。

编辑 1
我正在使用 SQL Server 2012 Express

编辑 2

这就是我最终得到的结果,我认为这会奏效:

SELECT 
   pt.trainID AS positTrainID, 
   et.trainID AS empTrainID, 
   e.empFirst + ' ' + e.empLast  AS empName
FROM 
   positTraining pt, 
   empTraining et, 
   emps e
WHERE 
   pt.positID = 1 AND
   e.empID = 1 AND 
   pt.trainID not in (
      SELECT et.trainID FROM empTraining et WHERE et.empID = 1)
      AND pt.trainID = et.trainID

结果:

positTrainID    empTrainID  empName
2                   2           Emp1

谢谢您的帮助!

4

1 回答 1

4

我认为这会起作用:

SELECT 
   positID, trainID 
FROM 
   positTraining 
WHERE 
   positID = X 
   AND trainID not in (
      SELECT trainID FROM empTraining WHERE empID = A)

将 X 视为您正在寻找的 Employee A 的 positionId

于 2013-04-30T20:52:57.900 回答