记一次错误查询

查询语句:

UPDATE `表名` SET status=-1 WHERE id=(SELECT id FROM `表名` WHERE position_id=%u AND status!=-1 ORDER BY box_no DESC LIMIT 1)

运行后报错:You can’t specify target table ‘表名’ for update in FROM clause
原因是因为:在同一语句中,不能先select出同一表中的某些值,再update这个表
解决方法:添加一个select的中间数据集把update和子句的select隔开,这样就好了
即:

UPDATE `表名` SET status=-1 WHERE id=(SELECT id FROM (SELECT * FROM `表名` WHERE position_id=%u AND status!=-1) a ORDER BY id DESC LIMIT 1)

另:mysql里没有select top语句
参考资料:https://www.jb51.net/article/60926.htm

猜你喜欢

转载自blog.csdn.net/wz12013/article/details/84851900