none
如何理解该SQL语句中的IN,谢谢 RRS feed

  • 问题

  • -- 操作日志表的所有记录
    SELECT * FROM JobLog
    查询结果:
    1    001    2007-11-01
    2    001    2007-11-02
    3    001    2007-11-03
    4    002    2007-11-04
    5    002    2007-11-05
    6    003    2007-11-06
    7    004    2007-11-07
    8    004    2007-11-08
    9    005    2007-11-09
    10  005    2007-11-10

    -- 每个功能最后一次操作记录
    SELECT * FROM JobLog A
    WHERE JobLogId in

            (
    SELECT TOP 1 JobLogId FROM JobLog
             
    WHERE A.FunctionId = FunctionId ORDER BY OperateTime DESC

            )
    查询结果:
    3    001    2007-11-03
    5    002    2007-11-05
    6    003    2007-11-06
    8    004    2007-11-08
    10  005    2007-11-10

    这个查询语句怎样理解??谢谢

    2010年9月19日 11:42

全部回复

  • 大家来发表下自己的高见啊~~~
    2010年9月19日 13:05
  • 你可以理解成两个循环

     

    SELECT * FROM JobLog A是外层循环,

    子查询SELECT TOP 1 JobLogId FROM JobLog          WHERE A.FunctionId = FunctionId ORDER BY OperateTime DESC
    是内层的循环

    运行结果如下

    外层循环第1次取值functionid为001时, 内循环如下SELECT TOP 1 JobLogId FROM JobLog    WHERE '001'= FunctionId ORDER BY OperateTime DESC

    这时 A.FunctionId  的值为001,内循环得到的值是3

     

    外层循环第2次取值functionid为002时, 内循环如下SELECT TOP 1 JobLogId FROM JobLog    WHERE '002'= FunctionId ORDER BY OperateTime DESC

    这时 A.FunctionId  的值为002,内循环得到的值是5

    以此类推....

     

    最后得到的值就是

    SELECT * FROM JobLog A
    WHERE JobLogId in
            (
      3,5,6,8,10
            )


    有dba的职位吗(北京的),请联系我 stswordman#hotmail.com
    2010年9月27日 10:20
    版主