我知道有类似的问题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
检索所有未由具有 appraisalId 12
的 EmpCode = 7190
选择的记录(培训)
注意 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
选择
最佳答案
对于第一个查询,您需要将大部分条件推送到 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 ;
关于mysql - 如何从一张表中选择用户尚未选择的所有记录?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28460932/