我知道存在类似的问题How to select all records from one table that do not exist in another table?,但我有不同的情况
我有TotalTrainings
,包含所有记录
TraningCode | TraningName
1 A
2 B
3 C
4 D
5 E
和另一个表SelectedTraining
TraningCode | TraningName | EmpCode | AppraisalID
1 A 7190 12
2 B 7190 12
3 C 8132 10
4 D 5555 08
5 E 8132 10
现在我必须从TotalTrainings
检索EmpCode = 7190
未appraisalId 12
注意TotalTraining
的别名是tt
,而SelectedTraining
是st
我已经完成了这样的书面查询:
select tt.trainingCode from TotalTraining tt left join SelectedTraining st
on tt.trainingCode = st.trainingCode where st.trainingCode is null
and EmpCode=7190 and appraisalId =12
但它没有给出任何结果。
我已经使用NOT IN
达到了同样的效果
select tt.trainingCode from TotalTraining tt where tt.trainingCode not in
(
select st.trainingCode from SelectedTraining st where
EmpCode=7190 and appraisalId =12
)
我想用Joins
来实现,任何人都可以告诉我可能出错的地方。
注意:请在此处忽略拼写错误,例如区分大小写AppraisalId
和appraisalId
,因为这不是问题
预期输出
3
4
5
因为EmpCode 7190
答案 0 :(得分:2)
对于第一个查询,您需要将大部分条件推送到on
子句 - 第二个表上的所有条件:
select tt.trainingCode
from TotalTraining tt left join
SelectedTraining st
on tt.trainingCode = st.trainingCode and
st.EmpCode = 7190 and
st.appraisalId = 12
where st.trainingCode is null ;