если возможно, немного помогаете?
У меня есть следующий запрос:
В строке или в базе данных у нас есть таблица под названием 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
Я думаю, вы можете просто заменить
lk.type like 'YG%'
со следующим:
(lk.type >= 'YG' and lk.type <'YG8') or (lk.type > 'YG8' and lk.type <='YGZ')
это должно выполнить то, что вы пытаетесь сделать, а также избегать использования "подобного", которое менее эффективно (при условии, что у вас есть индекс по lk.type, по крайней мере).
Вы можете уточнить это, зная, какие из возможных значений lk.type, конечно. Т.е. каковы крайности для подтипа YG? YG00-YG99? YG-YGZ?
(Будьте особенно внимательны, если у вас, например, есть YG81 или YG87, потому что тогда мое предложение не будет работать должным образом... с другой стороны, если ваш подтип YG может иметь такие значения, как YG34, было бы лучше использовать YG08 вместо YG8)
Используйте следующий запрос:
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 NOT LIKE 'YG8%'
?lk.type NOT LIKE 'YG%
верно?