2011-10-21 25 views
0

最後一個我有一個包含DELETE FROM與相同ID的條目,但保留在表

id username password last_touch 

有可能有相同的ID重複條目表。 last_touch是最後一個插入命令的時間戳。我如何刪除具有相同ID的所有條目,除了最後一個留下的內容外,我總是擁有最新的用戶詳細信息?

某處線沿線的:

DELETE FROM user_data 
WHERE id=1 
LIMIT (count(SELECT 1 
      FROM user_data 
      WHERE id=1) - 1) 

(很明顯的語法是不是在上面的例子中是正確的,因此MySQL抱怨。)

+0

它取決於id的聲明,是自動遞增(它應該是)還是你自己添加值到id?如果它自動遞增,我不認爲你可以有幾個具有相同ID的entires。 – Griffin

回答

4

使用嵌套查詢來選擇對於給出的最新時間戳用戶ID,並刪除該ID的所有行比一個不同的時間戳:

DELETE FROM user_data 
WHERE ID = 1 AND last_touch != 
    (SELECT latest FROM 
     (SELECT MAX(last_touch) AS latest FROM user_data WHERE ID = 1) AS temp 
    ) 

更新:固定d I整流器參考表被包裝另外SELECT在它周圍內SELECT修改,按照弗蘭克的意見。

+0

嗯..試過,但我得到「#1093 - 您不能指定目標表「用戶對更新的FROM子句」 –

+0

我認爲這就是問題所在:http://stackoverflow.com/questions/45494/ SQL-DELETE-着-指定目標表換更新功能於從子句 –

+0

@FrankVilea:的確,我已經忘了有關限制。用正在運行的查詢更新答案。 – Jon

2
DELETE FROM user_data u 
WHERE id=1 
AND last_touch < (SELECT max(last_touch) 
        FROM user_data 
        WHERE id=u.id) 
相關問題