У меня есть следующая таблица - Task(id, type, sessionId, termination, scenario)
У меня есть список sessionId
.Выделить все элементы из групп
Я хотел бы выбрать все задачи, общие для этих сеансов. Задачи равны, если они имеют один и тот же тип, завершение и сценарий.
Пример -
| id | type | sessionId | termination | scenario |
1 A 20 duration sc1
2 B 20 invocation sc1
3 C 20 duration sc2
4 A 21 duration sc1
5 B 21 invocation sc1
Для sessionId
списка равен (20, 21) - Я хотел бы получить следующую информацию
| id | type | sessionId | termination | scenario |
1 A 20 duration sc1
2 B 20 invocation sc1
4 A 21 duration sc1
5 B 21 invocation sc1
Задача с идентификаторами = 1,2,4,5 является общим для сессий 20 и 21.
Я разрабатываю следующий запрос -
select l.* from Task l
inner join(select p.* from Task p
where
p.sessionId in (20,21)
group by
p.type,
p.termination,
p.scenario
having
count(p.id)=2)s
on
l.type=s.type
and l.scenario=s.scenario
and l.termination=s.termination;
Это лучший способ получить такую информацию? Может быть, есть лучший запрос, который содержит только одну операцию select
и работает быстрее?
Это хорошее решение! Но есть ли способ не использовать 2 операции «выбрать»? –