SQL - вернуть строки, которые не имеют определенного значения

0

если возможно, немного помогаете?

У меня есть следующий запрос:

В строке или в базе данных у нас есть таблица под названием 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
  • 0
    Как насчет использования lk.type NOT LIKE 'YG8%' ?
  • 0
    @diiN__________ "все начинается с" YG ". Мне нужно вернуть те строки, которые не имеют типа" YG8 ", но просто не могут этого сделать." Вы имеете в виду lk.type NOT LIKE 'YG% верно?
Показать ещё 4 комментария
Теги:

2 ответа

0

Я думаю, вы можете просто заменить

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)

0

Используйте следующий запрос:

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%" и получал только записи, которые не были сопоставлены

  • 0
    Это работает удовольствие - спасибо! Очень ценится
  • 0
    Подзапрос не нужен. Это может быть просто обычное внешнее соединение,
Показать ещё 2 комментария

Ещё вопросы

Сообщество Overcoder
Наверх
Меню