zoukankan      html  css  js  c++  java
  • 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

  • 相关阅读:
    编程之美 2.3寻找发帖‘水王’ 扩展问题
    编程之美:1.12 扩展问题 解答与思考
    编程之美:1.9高效率安排见面会 图的m着色问题 回溯法
    研究生毕业课题怎么确定(转)
    图模型的统计推断 inference in graphical models(马尔科夫链的推断)
    微信js-sdk注意事项
    bootstrap-material-design-个人总结
    前端页面优化
    Material Design
    马克飞象
  • 原文地址:https://www.cnblogs.com/feixian49/p/990178.html
Copyright © 2011-2022 走看看