繁体   English   中英

SQL-返回没有特定值的行

[英]SQL - return rows that do not have a certain value

在可能的情况下在这里寻求帮助?

我有以下查询:

在或数据库上,我们有一个名为Linkfile的表,该表中的“类型”均以“ YG”开头。 我需要返回那些不具有“ YG8”类型但似乎无法执行的行。 我知道我需要使用子查询,但是卡住了!

这是我的代码以及需要返回的字段。 我只需要显示那些没有lk.type为“ YG8”的文件

select distinct l.description, p.displayname AS Temp,      p.compliance_status      As 'Compliant', lk.displayname, lk.type
from event e 
inner join organisation o on e.organisation_ref = o.organisation_ref
inner join opportunity opp  on e.opportunity_ref = opp.opportunity_ref
inner join event_role ev on ev.event_ref = e.event_ref
inner join address a on a.address_ref = opp.address_ref
inner join person p on ev.person_ref = p.person_ref
inner join lookup l on p.responsible_team = l.code
inner join person_type pt on  p.person_ref = pt.person_ref
inner join linkfile lk on lk.parent_object_ref = pt.person_ref
where  o.displayname LIKE '%G4S%'   and p.compliance_category = '$016' 
and lk.type like 'YG%'  and l.code_type = '2'
and a.displayname LIKE '%MOJ%' 
and pt.status = 'A'
order by l.description,  p.displayname, lk.type

使用以下查询:

select distinct l.description, p.displayname AS Temp,      p.compliance_status      As 'Compliant', lk.displayname, lk.type,lk.parent_object_ref
from event e 
inner join organisation o on e.organisation_ref = o.organisation_ref
inner join opportunity opp  on e.opportunity_ref = opp.opportunity_ref
inner join event_role ev on ev.event_ref = e.event_ref
inner join address a on a.address_ref = opp.address_ref
inner join person p on ev.person_ref = p.person_ref
inner join lookup l on p.responsible_team = l.code
inner join person_type pt on  p.person_ref = pt.person_ref
left join (select displayname, type,parent_object_ref from linkfile where lk.type like 'YG8%'  )lk on lk.parent_object_ref = pt.person_ref
where  o.displayname LIKE '%G4S%'   and p.compliance_category = '$016' and lk.parent_object_ref is null
 and l.code_type = '2'
and a.displayname LIKE '%MOJ%' 
and pt.status = 'A'
order by l.description,  p.displayname, lk.type;

我在链接文件上使用了“ YG8%”类型的左联接,并仅获取了不匹配的记录

我认为您可以更换

lk.type like 'YG%' 

具有以下内容:

(lk.type >= 'YG' and lk.type <'YG8') or (lk.type > 'YG8' and lk.type <='YGZ') 

这应该可以完成您要尝试执行的操作,还可以避免使用效率较低的“ like”(至少假设您在lk.type上具有索引)。

您可以通过了解哪些当然是lk.type的可能值来对此进行细化。 即YG“子类型”的极端情况是什么? YG00-YG99? YG-YGZ?

(例如,如果您可能拥有YG81或YG87,请格外小心,因为这样我的子句将无法正常工作...另一方面,如果您的YG子类型可以具有类似YG34的值,则最好使用YG08而不是YG8)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM