0
点赞
收藏
分享

微信扫一扫

mysql的一个缺点

深夜瞎琢磨 06-13 09:00 阅读 4

最近再移植一个从oracle转mysql的项目,喜提一个报错:

You can't specify target table 'A016' for update in FROM clause 

对应的程序代码:

public void setCurrent(String setId, String pk, String userId) throws SysException {
   String[] sql = new String[2];
   sql[0] = "update " + setId + " set " + setId + "000='00900' where id in (select id from " + setId + " where subid='" + pk + "')";
   sql[1] = "update " + setId + " set " + setId + "000='00901' where  subid='" + pk + "'";
   api.batchExecuteSql(sql);
}

sql[0]报的错。在oracle sqlserver里都没有错。mysql不行。核心问题是mysql不允许在update的where语句里出现要更新的表。

针对这种情况只能先把值取出来,然后在执行。

public void setCurrent(String setId, String pk, String userId) throws SysException {
   String id=api.queryForString("select id from " + setId + " where subid='" + pk + "'");
   String[] sql = new String[2];
   sql[0] = "update " + setId + " set " + setId + "000='00900' where id ='"+id+"'";
   sql[1] = "update " + setId + " set " + setId + "000='00901' where  subid='" + pk + "'";
   api.batchExecuteSql(sql);
}

举报

相关推荐

0 条评论