我意识到这可能没有意义,所以让我试着解释一下:
我有两个包含以下列的表(只是相关的):
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
谢谢您的帮助!