今天为了一项需求 在mysql里写了一个复合update语句:
UPDATE uchome_feed SET title_template =
( SELECT title_templateFROM uchome_feedWHERE feedid =1 )
WHERE feedid =2
( SELECT title_templateFROM uchome_feedWHERE feedid =1 )
WHERE feedid =2
这个是我按mssql的思路写的,因为我一直认为mssql和mysql在语法上区别很小,
而且这基本的update复合语句我自认是不会写错,
可是结果很让我意外。这条执行语句在mssql里面执行没有任何问题,
但是在mysql里却出现了 1093错误,
我百思不得其解,求助google.
答案让我非常差异。
难道这就是免费数据库的区别?BUG?
网上的解释:原因是不能根据select一个表得到的条件,来同时update这个表。
于是我换了一种写法
create table tmp as (select * FROM uchome_feed WHERE feedid =1 );
update uchome_feed SET title_template =
(SELECT title_template FROM tmp WHERE feedid =1 ) WHERE feedid =2;
drop table tmp;
update uchome_feed SET title_template =
(SELECT title_template FROM tmp WHERE feedid =1 ) WHERE feedid =2;
drop table tmp;
执行成功了。。。大汗。。。只有临时表可以解决这种问题。。。