各位高手:
    有这样一条SQL语句:
select gys , jsy from gylog a where a.gys in (111,222,333,444,555,666) and 
a.jsy=(select max(jsy) from gylog b where a.gys=b.gys)
经过测试这条语句执行的结里是这样:它查出了在gylog表中jsy最大的而且gys 包含在(111,222,333,444,555,666)中的记录小弟就是不明白这条语句为什么能返回这个结果,,,小弟认为(select gys , jsy from gylog a where a.gys in (111,222,333,444,555,666) and 
a.jsy in (select max(jsy) from gylog b group by gys))才能返回上面的结果,,,哪位高手给小弟讲解一下???

解决方案 »

  1.   

    in (select max(jsy) 。=  " ="
    最大的只有一个,不就等于“=” 了吗!
      

  2.   

    其实是一样的.
    比如说:select * from tablename where id=1 和 select * from tablename where id in (1)
    这两条是一样的.MAX是聚合函数,它返回的也是一个值,所以IN与=是一样的效果.
      

  3.   

    用in当然得到上面的结果,因为你in条件下只有一个记录,max()函数只返回一个记录 的
    如果你想得到全部,就去掉MAX()
      

  4.   

    select gys , jsy from gylog a where a.gys in (111,222,333,444,555,666) and 
    a.jsy=(值)
    select max(jsy) from gylog b where a.gys=b.gys 返回最大值
      

  5.   

    各位老大,小弟不理解的是这个:小弟认为select gys , jsy from gylog a where a.gys in (111,222,333,444,555,666) and 
    a.jsy=(select max(jsy) from gylog b where a.gys=b.gys)
    条语句返回的结里最多是一条记录,而(select gys , jsy from gylog a where a.gys in (111,222,333,444,555,666) and 
    a.jsy in (select max(jsy) from gylog b group by gys))条语句返回的结里有可能是多条的。
    假如gylog表中的记录是:
    gys      jsy
    111      200601
    111      200602
    222      200601
    222      200602
    333      200603
    333      200606
    小弟认为第一条语句应该返回的结果是:一条记录333    200606小弟认为第二条语句应该返回的结果是:三条记录111    200602
                                               222    200602
                                               333    200606
    结果测试时结果两条语句返回的结果相同都是111   200602
                                            222   200602
                                            333   200606
    各位老大,你们能明白小弟的意思不,,快急死我了,,请问一下小弟对第一条语句哪里理解错了??????
      

  6.   

    把后面那个联接去掉,就行了,你是想得出gylog中jsy最大的,没有必要联接
    改为:
    select gys , jsy from gylog a where a.gys in (111,222,333,444,555,666) and 
    a.jsy=(select max(jsy) from gylog)
      

  7.   

    我想得到gylog表中相同gys中jsy最大的....