update a
    set nid=(select min(name) from a where staff_id='aaa')
  where  staff_id='aaa'你写错了,当然更新错了!

解决方案 »

  1.   

    我后来也是用这种办法更新了
    但我想不通的是后面明明有where条件,但是为什么把表中所有的数据都更新了一次了?
      

  2.   

    真的没人,这难到是SQL的通病
      

  3.   

    描叙:   把表a中列staff_id等于aaa的记录的列nid更新为该表列name的最小值,但奇怪的是把表中所有记录的nid更新为name的最小值了
         (假如等于aaa的记录有6条,该表name列的最小值等于'1',那么就是把这6条记录的列nid更新为'1';但a表中所有记录的nid列全部都更新为'1')
      

  4.   

    sybase效率高吗?我用的是SQL我不太清楚它们之间的区别。我感觉这种问题在SQL中好象没有发生过!!个人想法。供参考。
      

  5.   

    update a
        set nid=min(name)
        where staff_id='aaa'
    这样的语句相当于:
    update a
        set nid=(select min(name) from a where staff_id='aaa')你的情况应该这样写:
    update a
        set nid=(select min(name) from a)
    where staff_id='aaa'
    /***************************************************/
    铁的承诺,风的回忆.
    永远的亚特兰蒂斯,永远的炎龙骑士团.
    /***************************************************/
      

  6.   

    你的WHERE 條件是被Sybase當作了min(name)的條件了罷。
      

  7.   

    我试了一下,在ORACLE中没有问题,因为ORACLE中没有UPDATE ... SET ... FROM ...这样的语法,所以WHERE必定是针对目的表的
      

  8.   

    sql server:你的语句语法通过不了,看来只有SYBASE有这个问题.
    错误信息:
    Msg 157, Level 15, State 1
    An aggregate may not appear in the set list of an update statement.
      

  9.   

    对ORACLE中就没有这个问题,sybase,唉唉唉唉唉