2011-07-01 30 views
4

我想用最大的order_id來detele行,我試過這樣:刪除其中id是最大的

DELETE FROM orders WHERE MAX(order_id) 

但這是錯誤的!任何其他想法?

謝謝你的時間。

+0

'WHERE order_id = MAX(order_id)'? –

+0

不,它不工作 – TooCooL

回答

6

第一個想法(其中有不少人認爲有完全一樣的):

DELETE FROM orders 
WHERE order_id = 
     (SELECT MAX(order_id) 
     FROM orders 
    ) 

不幸的是MySQL的抱怨有:

> ERROR 1093 (HY000): You can't specify target table 'orders' for update in FROM 
> clause 

兩種方式繞過錯誤:

DELETE FROM orders 
WHERE order_id = 
     (SELECT maxo 
     FROM 
      (SELECT MAX(order_id) AS maxo 
      FROM orders 
      ) AS tmp 
     ) 

或:

DELETE FROM orders 
ORDER BY order_id DESC 
LIMIT 1 
+0

它現在工作謝謝;) – TooCooL

3

你可以試試:

DELETE FROM orders where order_id = (select max(order_id) from orders) 
+0

你讓我少於一秒:) –

+1

我得到這個錯誤:#1093 - 你不能指定目標表的'訂單'在FROM子句更新 – TooCooL

+0

我剛試過這個,它確實工作,你在用什麼數據庫? –

-1

嘗試:

DELETE FROM orders where order_id = (SELECT MAX(order_id) FROM orders) 
+0

我試過這個它沒有工作,但無論如何謝謝 – TooCooL

0

嘗試的子查詢。

DELETE FROM orders WHERE order_id = (SELECT MAX(order_id) FROM orders) 
+0

我得到這個錯誤:#1093 - 你不能指定目標表'訂單'在FROM子句 – TooCooL

+0

meh,mysql,呵呵更新。您不能更新子選擇中提到的表格。不知道是否存在單語句方式,您可能必須將SELECT和DELETE包裝在應用程序中的事務中。 – sbeam

+0

我有一個想法如何使用PHP做到這一點,但首先我想請你們看看是否有更好的做一個MySQL的聲明,但無論如何謝謝你的時間和幫助 – TooCooL

5

對於MySQL,這將是最簡單的:

DELETE FROM orders 
ORDER BY order_id DESC 
LIMIT 1; 

你不能這樣做,其他幾個人都回答的子查詢招,因爲如果你從表中選擇MySQL不喜歡它並在同一查詢中更新/刪除它。

+0

簡單而有效,這是要走的路:)沒有麻煩 – casraf