mysql中You can’t specify target table for update in FROM clau_MySQL教程

编辑Tag赚U币
教程Tag:暂无Tag,欢迎添加,赚取U币!

推荐:MySQL查询和修改auto_increment的方法
本文实例讲述了MySQL查询和修改auto_increment的方法。分享给大家供大家参考。具体如下: 查询表名为tableName的auto_increment值: 代码如下:SELECT AUTO_INCREMENT FROM information_schema.tables WHERE table_name=tableName; 修改表名为tableName的auto_increment

 mysql中You can't specify target table for update in FROM clause错误的意思是说,不能先select出同一表中的某些值,再update这个表(在同一语句中)。 例如下面这个sql:

代码如下:
delete from tbl where id in 
(
        select max(id) from tbl a where EXISTS
        (
            select 1 from tbl b where a.tac=b.tac group by tac HAVING count(1)>1
        )
        group by tac
)

 

改写成下面就行了:

 

代码如下:
delete from tbl where id in 
(
    select a.id from 
    (
        select max(id) id from tbl a where EXISTS
        (
            select 1 from tbl b where a.tac=b.tac group by tac HAVING count(1)>1
        )
        group by tac
    ) a
)

 

也就是说将select出的结果再通过中间表select一遍,这样就规避了错误。注意,这个问题只出现于mysql,mssql和oracle不会出现此问题。

分享:MySQL中的if和case语句使用总结
Mysql的if既可以作为表达式用,也可在存储过程中作为流程控制语句使用,如下是做为表达式使用: IF表达式 代码如下: IF(expr1,expr2,expr3) 如果 expr1 是TRUE (expr1 0 and expr1 NULL),则 IF()的返回值为expr2; 否则返回值则为 expr3。IF() 的返回值为数字值或字符

来源:模板无忧//所属分类:MySQL教程/更新时间:2015-03-07
相关MySQL教程