我写了下面的查询,但我意识到我需要它做与目前相反的事情。
我需要在UG中显示每个人都有一个payroll_no,这个数字在esr中不存在。
select distinct ug.name, ug.payroll_no, esr.assignment
from user_group as ug
inner join esrtraining as esr
on ug.payroll_no = SUBSTRING(esr.assignment,2,8)
任何帮助表示赞赏。感谢。
答案 0 :(得分:4)
请试试这个。这利用了LEFT JOIN
,它将ug
表中的所有内容后跟WHERE
子句,该子句过滤并仅带来那些不满足匹配条件的记录
select distinct ug.name, ug.payroll_no, esr.assignment
from user_group as ug
LEFT join esrtraining as esr
on ug.payroll_no = SUBSTRING(esr.assignment,2,8)
WHERE
esr.assignment is NULL
答案 1 :(得分:3)
您需要执行LEFT JOIN
,这会将所有esr
字段保留为NULL
。从那里,您只需使用WHERE esr.assignment IS NULL
过滤该结果。
出于这个原因,esr.assignment
当然在您的选择中始终为空。
答案 2 :(得分:1)
您表达问题的方式是解决问题的好方法:使用not exists
:
select ug.name, ug.payroll_no
from user_group as ug
where not exists (select 1
from esrtraining as esr
where ug.payroll_no = SUBSTRING(esr.assignment, 2, 8)
);
除非您在user_group
中有重复项,否则不应该使用distinct。