簡體   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