同一字段根据不同条件更新的sql语句怎么写?
用两条update语句已经实现了,但是出了问题,看这样能不能解决,谁知道这条语句怎么写?谢谢啦!

解决方案 »

  1.   

    update 表 set 字段1 = 值1 where 条件1
    update 表 set 字段1 = 值2 where 条件2怎样把这两个语句合并成一句同时执行?
      

  2.   

    <%
      String sql1,sql2,sql3,sql4,sql5;
      int i=0,cs=0;
      String[] xm = request.getParameterValues("xm");
      for(i=0;i<xm.length;i++)
      {
        xm[i]=new String(xm[i].getBytes("ISO8859_1"),"GBK");
        String sj=new String(request.getParameter("sj").getBytes("ISO8859_1"),"GBK");
        String mc=new String(request.getParameter("mc").getBytes("ISO8859_1"),"GBK");
        sql1="INSERT INTO t_jkb (jk_sj,jk_mc,jk_js) Values ('"+sj+"','"+mc+"','"+xm[i]+"')";
        sqlbean.executeInsert(sql1);
        sql2="UPDATE t_jsxx SET js_jk ='1' where js_xm='"+xm[i]+"'";
        sqlbean.executeUpdate(sql2);
        sql3="UPDATE t_jsxx SET js_jk ='0' where js_xm<>'"+xm[i]+"'";
        sqlbean.executeInsert(sql3);

        sql4="select * from t_jsxx where js_xm='"+xm[i]+"'";
        ResultSet RS1=sqlbean.executeQuery(sql4);  
        if(RS1.next())
        {
          cs=RS1.getInt("js_jkcs");
        }
        sql5="UPDATE t_jsxx SET js_jkcs ='"+cs+"'+1 where js_xm='"+xm[i]+"'";
        sqlbean.executeUpdate(sql5);
      }
    %>
      

  3.   

       sql2="UPDATE   t_jsxx   SET   js_jk   ='1'   where   js_xm='"+xm[i]+"'"; 
       sqlbean.executeUpdate(sql2); 
       sql3="UPDATE   t_jsxx   SET   js_jk   ='0'   where   js_xm <> '"+xm[i]+"'"; 
       sqlbean.executeInsert(sql2); //  换成 sqlbean.executeUpdate(sql3); 
      

  4.   

    executeInsert和executeUpdate此时的作用一样,问题依旧。
      

  5.   

    String   sql2="UPDATE       t_jsxx       SET       js_jk       ='1'       where       js_xm='"+xm[i]+"'"  go UPDATE       t_jsxx       SET       js_jk       ='0'       where       js_xm   <>   '"+xm[i]+"' ; 试下行吗?
      

  6.   

    我也没办法了.等高手吧.
    我以前写的都好使的.
    boolean isSuccess = false;
    DBPersistenceManager pm = this.getECPersistenceManager();
    try {
    String sql = "";
    /** 根据修改标志,修改不同的字段 **/
    if("0".equals(flag)){
    sql = "UPDATE EC_COMP_NOTICE SET S_READ_FLAG=? WHERE ID=? AND SENDER=?";
    pm.executeUpdate(sql, new Object[]{"0", noticeID, psnId});
    }
    else{
    sql = "UPDATE EC_COMP_NOTICE_PERSON SET R_READ_FLAG=? WHERE ID=? ";
    pm.executeUpdate(sql, new Object[]{"0", tempID});
    }

    isSuccess = true;
    } catch (DrmException ex) {
    EcLogger.error("查询已发送通知记录列表出现异常:", ex.getMessage());
    throw new EcBusinessException(ex.getMessage());
    } finally {
    if (pm != null)
    pm.close();
    }
    最好用预处理的方式写.就是?号传值,这样如果字段带" ' " 也不会有错
      

  7.   

    有这么一个理论,你看看能不能考虑下
    假设有两个条件  A  和  B
    如果A成立
    则是  select * from tname where A=true
    如果 A不成立 则取B
    那就是 select * from tname where A<>true and B=true
    那合起来就是 select *  from tname where A=true or (A<>true and B=true)
      

  8.   

    update test
    set 字段1=case when 条件1 then 值1 
                   when 条件2 then 值2
              end
      

  9.   

    String sql2="UPDATE t_jsxx SET js_jk =case when js_xm='"+xm[i]+"'" + " then '1' else '0' end";这样就OK了
      

  10.   

    还是不行啊,但是发现sql语句都没有问题,是不是和循环有关
      

  11.   

    String[]   xm   =   request.getParameterValues("xm"); 你这句得到的是什么?
      

  12.   

            sql2="UPDATE   t_jsxx   SET   js_jk   ='1'   where   js_xm='"+xm[i]+"'"; 
            sqlbean.executeUpdate(sql2); 
            sql3="UPDATE   t_jsxx   SET   js_jk   ='0'   where   js_xm <> '"+xm[i]+"'"; 
            sqlbean.executeInsert(sql3); 
    这两条语句分开都没有问题,就是放在一起结果就不对了。
      

  13.   

    那是你的页面问题,再检查检查吧。加个语句 看看循环了几次?<%
        String   sql1,sql2,sql3,sql4,sql5;
        int   i=0,cs=0;
        String[]   xm   =   request.getParameterValues("xm");
        for(i=0;i <xm.length;i++)
        {   System.out.println(xm[i]);
            xm[i]=new   String(xm[i].getBytes("ISO8859_1"),"GBK");
            String   sj=new   String(request.getParameter("sj").getBytes("ISO8859_1"),"GBK");
            String   mc=new   String(request.getParameter("mc").getBytes("ISO8859_1"),"GBK");
            sql1="INSERT   INTO   t_jkb   (jk_sj,jk_mc,jk_js)   Values   ('"+sj+"','"+mc+"','"+xm[i]+"')";
            sqlbean.executeInsert(sql1);
            sql2="UPDATE   t_jsxx   SET   js_jk   ='1'   where   js_xm='"+xm[i]+"'";
            sqlbean.executeUpdate(sql2);
            sql3="UPDATE   t_jsxx   SET   js_jk   ='0'   where   js_xm <> '"+xm[i]+"'";
            sqlbean.executeInsert(sql3);
            sql4="select   *   from   t_jsxx   where   js_xm='"+xm[i]+"'";
            ResultSet   RS1=sqlbean.executeQuery(sql4);    
            if(RS1.next())
            {
                cs=RS1.getInt("js_jkcs");
            }
            sql5="UPDATE   t_jsxx   SET   js_jkcs   ='"+cs+"'+1   where   js_xm='"+xm[i]+"'";
            sqlbean.executeUpdate(sql5);
        }
    %>
      

  14.   

    是循环的问题。
    建议把string[] xm = "..." 10个值连在一起。
    stirng nameLink = "'" + xm[0] +"','" +xm[1]+"','" +...
    nameLink = "'name1','name2','name3',.....'name10'"然后strSql = "UPdate  t_jsxx set js_jk = when xm in (" + nameLink +") then '1' else '0' end "
    未测试
      

  15.   

    update mycolumn set mycolumn = (case when mycondition then myvalue1 else myvalue2 end)直接写的。可能会有错。
    不过基本就是这样写。以前用过的。可以实现
      

  16.   

    是你的写法的问题
    你每循环一次,xm[i]的值都不一样,而那个语句 
    String   sql2="UPDATE   t_jsxx   SET   js_jk   =case   when   js_xm='"+xm[i]+"'"   +   "   then   '1'   else   '0'   end";
    的意思是 值为xm[i]的 =1,不为xm[i]的 =0 你循环到最后一次当然是最后一个xm[i]的值是1了。而其他的都为0了。
      

  17.   

    只写这句就是你要的目的了
    sql2="UPDATE   t_jsxx   SET   js_jk   ='1'   where   js_xm='"+xm[i]+"'";
      

  18.   

    用case...when啊,应该可以的吧!
      

  19.   

    sql2="UPDATE  t_jsxx     SET   js_jk  ='1'   where    js_xm='"+xm[i]+"'"; 
    sqlbean.executeUpdate(sql2); 
    sql3="UPDATE  t_jsxx     SET   js_jk   ='0'    where   js_xm   <>   '"+xm[i]+"'"; 
    sqlbean.executeInsert(sql3); 
    ------------------------------------------------------------String   sql2="UPDATE     t_jsxx   SET   js_jk   =case    when   js_xm='"+xm[i]+"'"   +  "   then   '1'   else    '0'  end"; 
    sqlbean.executeUpdate(sql2); 
    改成下面的会出错?我觉得没问题啊,楼主好好检查一下,sql语句循环应该没问题啊
      

  20.   

    我晕!!还没搞明白?? 你自己设计的问题  你这种想法是不能用 循环的 !!! 
    只能在把 jk_js 的值默认设置成0,然后你再循环执行 sql2="UPDATE       t_jsxx       SET       js_jk       ='1'       where       js_xm='"+xm[i]+"'"; 这条语句就行了!!!