おそらく意味をなさないので、説明してみましょう。
次の列を持つ2つのテーブルがあります(関連するもののみ):
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
これは正しいですが、現在の記録のためだけです。別の従業員が正しい一致でデータベースに配置されるとすぐに、これは機能しなくなります。
私はいくつかの異なる方法を使用してみました:
JOINS
NOT IN
NOT EXIST
これは私が作っているよりもずっと簡単だと確信していますが、それを理解することはできません.
ご協力いただきありがとうございます。詳細があれば喜んで追加させていただきます。お知らせください。
EDIT 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
助けてくれてありがとう!