我需要一些帮助来设置我的查询。如果可以避免的话,我不想进行多次选择以形成基本相同的子查询。简而言之,我调用TimeSlot
了用于跟踪多个细节的对象。那些TimeSlot
是支付的项目。当它TimeSlot
提交报销时,它们被用来创建一个PayableTimeSlot
. 在TimeSlot
可以支付之前,我需要确保它尚未支付。
因为它位于以下是我的查询:
@NamedQuery(
name = "TimeSlot.by.person.academy.id.by.contract.date",
query = "select distinct ts
from TimeSlot ts
join ts.invitedInstructors ii
join ts.academyClass ac
join ac.academy a
where ii.person.id = ?
and a.id = ?
and ts.schedule.startDateTime BETWEEN ? AND ?
and ts.id not in (select e.id from PayableTimeslot pts join pts.event e)
and ? not in (select e.claimant from PayableTimeslot pts join pts.event e)")
如您所见,我已经从 PayableTimeSot 中为 first 选择了一个元素not in
。有没有办法将子查询扩展为:
(select e.id, e.claimant from PayableTimeslot pts join pts.event e)
我只是不确定如何检查not in
子查询的多个项目。无论如何,如果有比我这样做的方式更好的解决问题的方法,请告诉我。
除非你们都认为多重选择不会有什么大不了的……平均每周会有 30-50 个条目进入表中,每个条目被复制(用于审计跟踪)超过 7-9 次。