我有下一张桌子 -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
ids=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
操作并且工作得更快?