SQL Server 中的多级子查询

有两个表,分别是 A,B

AID ScriptID  TaskID  YearID
1      5    3    1
2      5    4    1
3      5    5    1
4      6    3    1
5      6    4    1
6      7    3    2
7      7    5    2
8      8    2    2
9      8    6    2


B 表如下
BID    AID
11    1
12    2
13    3
14    4
15    5
16    6
17    7
18    8
19    9

获取 A 表中 YearID=1,ScriptID=5, TaskID 为不大于 4 的最大值

select  ScriptID, max (TaskID) as  TaskID   from  A 
where  YBID = 1   and  ScriptID = 5   and  TaskID <= 4
group   by  ScriptID

上面只能获取 A 的 ScriptID 和 TaskID ,如果还要获取 AID, 可以用子查询

select  A1.ID,A1.ScriptID,A1.taskID 
    
from  A A1
    
JOIN
        (
select  ScriptID, max (TaskID) as  TaskID   from  A 
            
where  YBID = 1   and  ScriptID = 5   and  TaskID <= 4
            
group   by  ScriptID 
        ) A2 
on  A1.ScriptID = A2.ScriptID  and  A1.TaskID = A2.TaskID

如果将 A 满足上面条件的记录和 B 表关联,获取 B 的ID, 可以用多级子查询:

select  B. * ,A. *   from  B
join  
    (
select  A1.ID,A1.ScriptID,A1.taskID 
        
from  A A1
        
JOIN
            (
select  ScriptID, max (TaskID) as  TaskID   from  A 
                
where  YBID = 1   and  ScriptID = 5   and  TaskID <= 4
                
group   by  ScriptID 
            ) A2 
on  A1.ScriptID = A2.ScriptID  and  A1.TaskID = A2.TaskID
) A 
on  A.ID = B.AID

转载于:https://www.cnblogs.com/feixian49/archive/2007/12/11/990178.html

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值