大家好,我有一个问题,现在我想用一个update的SQL语句,在update的where条件里,我用了select语句,原句是这样的:String strSql = "update BATCH set status = 'oldStatus' where id = ( select id from BATCH where status = 'newStatus' order by id limit 1)";现在的问题就是,我无法取得当前update的那个Batch的ID。我不想把update和select分开写,因为涉及到一些synchronized的问题,我想同时执行update和select.有哪位大侠知道怎么样能把ID给找到吗?谢谢给位了

解决方案 »

  1.   


    update BATCH set status = 'oldStatus' where id = ( select id from BATCH where status = 'newStatus' order by id limit 1这个id应该是从页面上传进来的呀?
    例如页面上有个列表,点中某条数据,把数据id传进来。update BATCH set status = 'oldStatus' where id =@id
      

  2.   


    String strSql = "update BATCH set status = 'oldStatus' where id = ( select id from BATCH where status = 'newStatus' order by id limit 1)";注意下id是否能够从order by id limit 1取出来~limit @id 在Mysql中是分页的意思~
      

  3.   

    同意2楼,limit 1能确定只有一个id出来么
      

  4.   

    String strSql = "update BATCH set status = 'oldStatus' where status = 'newStatus'";
    自己把自己绕进去了吧,很简单就能解决问题写个子查询干嘛;
      

  5.   

    update BATCH set status = 'oldStatus' where id in( select id from BATCH where status = 'newStatus')
      

  6.   

    你先输出select id from BATCH where status = 'newStatus' order by id limit 1的结果看看
      

  7.   

    String strSql = "update BATCH set status = 'oldStatus' where id = (select id from( select id from BATCH where status = 'newStatus' order by id) A where A.rownum>=1 )";
      

  8.   

    10楼的想法应该是正确的
    SQL解析器分析你的sql语句的时候,并不会因为你写了limit 1就判断出你的结果集只有一条数据。
    select的结果是一个集合,所以你应该用in来判断。
      

  9.   

    不懂 学习! 
    我觉得还是不要用复杂的sql语句吧!有简单的就多些几句实现功能就得了!
      

  10.   

    谢谢各位,已经解决了,用了transaction