我有下面的查询,它选择一个特定的值,如果它存在,然后它上升一个级别,如果它不存在,否则它选择另一个记录。
IF EXISTS (SELECT top 1 * from tblDiscounts where ItemType_Fkey = 5176 order by EntryDate desc)
BEGIN
SELECT top 1 * from tblDiscounts where ItemType_Fkey = 5176 order by EntryDate desc
END
ELSE IF EXISTS (SELECT discount_fkey from tblItems where ID = (select Item_Fkey from tblItemType where ID = 5176))
BEGIN
select * from tblDiscounts where ID = (SELECT discount_fkey from tblItems where ID = (select Item_Fkey from tblItemType where ID = 5176))
END
ELSE
BEGIN
select top 1 * from tblDiscounts where ID NOT IN (select Discount_Fkey from tblItems) and ItemType_Fkey is null
END
我认为这个查询会显著降低性能。有没有更好的方法来达到同样的效果,更有效?希望有人把我引向正确的方向。
1条答案
按热度按时间pobjuy321#
考虑到查询的简单性,以及使用单个
@id
性能是否需要改进还有待商榷。然而,如果t-sql在基于集合的解决方案中工作得更好,那么解决这类问题的一种方法就是使用order by
首先获得最高优先级的结果。要对此进行调试,请将
order by
并删除top 1
因为这将允许你看到逻辑工作,并调整它,如果必要的话,例如。