请大家帮我看下这个sql语句,,其中的join部分不怎么看的明白(习惯看where的),请兄弟们帮帮我,帮我把下面这个sql语句中的join翻译成where,,非常感谢!!!select top 10 disk.objectkey as array_disk,  maximum as max_read    from halchm.hal_storagearray as array   join halchm.hal_disk as disk  join vxam.object as mon_obj on disk._objectlink = mon_obj.external_id   join vxam.NCL_READS_PERSECOND_HOUR as DataTable on mon_obj.ID = DataTable.object_id   where array.objectkey = 'IBM.2107-75LH581_900' and  average_time between dateadd(hour, -24, now()) and dateadd(hour, -23, now())    order by max_read desc

解决方案 »

  1.   

    你这个是mssql的写法吧?
    跟Oracle差不多,只是把你top改成先排序后取前10
    select array_disk,max_ from (
    select rownum as rn,disk.objectkey as array_disk, maximum as max_
    from halchm.hal_storagearray as array 
    join halchm.hal_disk as disk on......--这个你的连接条件是不是漏了?
    join vxam.object as mon_obj on disk._objectlink = mon_obj.external_id 
    join vxam.NCL_READS_PERSECOND_HOUR as DataTable on mon_obj.ID = DataTable.object_id 
    where array.objectkey = 'IBM.2107-75LH581_900' 
    and average_time between dateadd(hour, -24, now()) and dateadd(hour, -23, now()) order by max_read desc)
    where rn<=10
      

  2.   


    select disk.objectkey as array_disk, maximum as max_read 
    from halchm.hal_storagearray array, 
    halchm.hal_disk disk, 
    vxam.object mon_obj,
    vxam.NCL_READS_PERSECOND_HOUR DataTable
    row_number() over(order by max_read desc) rn
    where disk._objectlink = mon_obj.external_id 
          and array.= disk._objectlink -- 还少个连接条件
          and mon_obj.ID = DataTable.object_id 
          and array.objectkey = 'IBM.2107-75LH581_900' 
          and average_time between dateadd(hour, -24, now()) 
               and dateadd(hour, -23, now()) 
    --dateadd() 你是自己写的函数吗?now()是要取当前的系统时间吗?如果是的话要用sysdate
          and rn<=10
      

  3.   

    select disk.objectkey as array_disk, maximum as max_read 
    from halchm.hal_storagearray array, 
    halchm.hal_disk disk, 
    vxam.object mon_obj,
    vxam.NCL_READS_PERSECOND_HOUR DataTable
    row_number() over(order by max_read desc) rn
    where disk._objectlink = mon_obj.external_id 
          and array.= disk._objectlink -- 还少个连接条件
          and mon_obj.ID = DataTable.object_id 
          and array.objectkey = 'IBM.2107-75LH581_900' 
          and average_time between sysdate -1 and sysdate - 23/24              
          and rn<=10
      

  4.   


    ---mssql
    select top 10 disk.objectkey as array_disk, maximum as max_read 
    from halchm.hal_storagearray as array join halchm.hal_disk as disk --少了个连接条件
    join vxam.object as mon_obj on disk._objectlink = mon_obj.external_id 
    join vxam.NCL_READS_PERSECOND_HOUR as DataTable on mon_obj.ID = DataTable.object_id 
    where array.objectkey = 'IBM.2107-75LH581_900' 
    and average_time between dateadd(hour, -24, now()) and dateadd(hour, -23, now()) 
    order by max_read desc--oracleselect array_disk,max_read
    from (select disk.objectkey as array_disk, maximum as max_read 
    from halchm.hal_storagearray as array join halchm.hal_disk as disk --少了连接条件
    join vxam.object as mon_obj on disk._objectlink = mon_obj.external_id 
    join vxam.NCL_READS_PERSECOND_HOUR as DataTable on mon_obj.ID = DataTable.object_id 
    where array.objectkey = 'IBM.2107-75LH581_900' 
    and average_time between  sysdate-1 and sysdate-23/24
    order by max_read desc)
    where rownum<11