我在构建一个查询时遇到问题,该查询显示存在之前和之后的记录的缺失记录。例如:
Ticket #
123
125
我想要回归的是:
124
我要比较的表格为Tickets
和TicketBooks
。门票包含所有使用过的门票,而TicketBooks包含已经发出的所有门票(已使用且可能未使用)。我正在使用的当前查询显示所有丢失的记录。
select TicketNum, TicketBookNum, UnitID, DateIssued, IssuedBy
from TicketBooks
where not exists(select TicketNum
from Tickets
where Tickets.TicketNum=TicketBooks.TicketNum)
当用户发出TicketBook时,会发出25张Tickets。因此,如果发行了第一本书并且使用了票证100-110并且已经使用了112,我希望查询返回:
Ticket #
111
我不希望查询返回113,114,115等...任何想法都将不胜感激。
此外,门票可以发给多个单位,因此一个单位可以有1-25张票,而另一个单位可以有200-225张票。这使我无法将搜索限制为最高票证。
TicketBooks中的数据不包含最小和最大票证。表中的值如下:
TicketBooks
-------------
TicketBookNum
TicketNum
UnitID
Active
答案 0 :(得分:4)
如果我理解正确,您希望将丢失的票证限制为最大使用值之前的票证:
select tb.TicketNum, tb.TicketBookNum, tb.UnitID, tb.DateIssued, tb.IssuedBy
from TicketBooks tb
where not exists (select 1
from Tickets t
where t.TicketNum = tb.TicketNum
) and
tb.TicketNum < (select max(tb2.TicketNum) from TicketBooks tb2);
答案 1 :(得分:0)
我相信以下查询是您想要的:
select TicketNum, TicketBookNum, UnitID, DateIssued, IssuedBy
from TicketBooks
where TicketNum not in (select TicketNum from Tickets)
AND TicketNum + 1 in (select TicketNum from Tickets)
AND TicketNum - 1 in (select TicketNum from Tickets)
此查询将显示所有“TicketBooks”记录,这些记录没有相应的“Tickets”记录,并且在TicketNum之前和之后具有“Tickets”记录。