通过AssociationNumber关联的Shifts与Requests表SQL查询实现问题
解决方案
实现思路如下:
- 先获取指定查询的ShiftId对应的AssociationNumber值
- 匹配符合要求的班次:如果AssociationNumber非空,返回所有同关联号的班次;如果AssociationNumber为空,仅返回目标班次本身
- 左关联Requests表,带出对应关联的请求记录
你可以直接使用以下SQL语句,替换@TargetShiftId的参数值即可查询对应结果:
DECLARE @TargetShiftId INT = 1; -- 替换为你要查询的ShiftId DECLARE @AssocNumber INT = (SELECT AssociationNumber FROM Shifts WHERE ShiftId = @TargetShiftId); SELECT s.ShiftId, s.AssociationNumber, r.requestId FROM Shifts s LEFT JOIN Requests r ON s.ShiftId = r.shiftId WHERE (@AssocNumber IS NOT NULL AND s.AssociationNumber = @AssocNumber) OR (@AssocNumber IS NULL AND s.ShiftId = @TargetShiftId) ORDER BY s.ShiftId;
效果验证
- 当
@TargetShiftId = 1或者@TargetShiftId = 2时,均返回ShiftId为1、2的两条记录,其中ShiftId 1关联requestId为1,ShiftId 2无关联请求 - 当
@TargetShiftId = 5时,仅返回ShiftId为5的记录,关联requestId为3 - 当
@TargetShiftId = 3或者@TargetShiftId = 4时,均返回ShiftId为3、4的两条记录,其中ShiftId 3关联requestId为2,ShiftId 4无关联请求
内容的提问来源于stack exchange,提问作者Kevin Robinson
相关产品推荐
相关产品推荐

