1. 程式人生 > >記一次錯誤查詢

記一次錯誤查詢

查詢語句:

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