不存在子句未按预期工作



我想搜索所有没有分析师(cod_role_acces(的公司(niu_lds(。

示例:假设有一家X公司有3名员工。其中一位是分析师。我不希望那家公司出现在我的业绩中。但是如果存在具有2名员工的Y公司并且他们中没有一个是"公司";分析员";,那么我希望这家公司能拿出结果。

这是我的问题:

SELECT DISTINCT
a.name_pers as "First Name",
a.last_pers as "Last Name",
a.id as "# account",
a.cod_role_acces as "Profile", 
a.niu_lds as "Company", 
b.cod_missn as "Mission", 

FROM sr.c_r_v_obt_cp_util a inner join ods.c_od_missn_ld b on a.niu_lds = b.niu_lds
WHERE a.cod_eta_util in ('VER', 'APPR')
and a.id_cod_sr_alim = '2'
and b.cod_missn = 'PHA'
and not exists (select null
from sr.c_r_v_obt_cp_util c 
where c.niu_lds = a.niu_lds
and a.cod_role_acces = 'ANALYST'
);

我的问题是它正在把我退回"公司";已经";分析员";!我想看看所有没有属于该公司的"ANALYST"(cod_role_access(的公司(niu_lds(。

我已经问了这个问题,有人帮了我很多,但我仍然没有得到预期的结果。

我的第一个问题:SQL查询来检查一个值是否为';不存在

谢谢

我相信罗密欧将null改为1的答案可能会让你达到目的。

如果没有,并且你想直观地看到发生了什么来进行比较,你可以把不存在的函数变成左联接,这样你就可以看到值的位置。

使用上一篇文章中的测试示例

with test (company, ename, profile) as
(select 'BMW', 'Scott', 'Analyst' union all
select 'BMW', 'King' , 'Manager' union all
select 'BMW', 'Mike' , 'Clerk'  union all
select 'SAP', 'John' , 'Clerk' union all
select 'SAP', 'Fred' , 'Manager' 
)
select a.company, a.ename, a.profile, b.analyst
from test a
left join (select 1 as analyst, company
from test
where profile = 'Analyst') b
on b.company = a.company

以下是返回-

档案分析师
COMPANYENAME分析
宝马Scott1
宝马King
宝马Mike
SAPSAP经理

最新更新