2011-07-18 3 views
0

このエラーを修正する方法私はMySQLエラー1093

[Err] 1093 - You can't specify target table 'user_log' for update in FROM clause

DELETE 
    user_log 
FROM 
    user_log 
WHERE 
    UpdateDate < (SELECT MAX(UpdateDate) 
    FROM user_log 
    AS lookup 
    WHERE Email = user_log.Email) 

は私がへ

答えて

1

あなたがテーブルのデータを削除したい場合は、あなたが使用します。

delete [テーブル] [状態]から。

maxの場合も、データを最初にグループ化する必要があります。

DELETE 
FROM 
    user_log 
WHERE 
    UpdateDate < (SELECT MAX(UpdateDate) 
    FROM user_log 
    GROUP BY Email 
    HAVING Email = user_log.Email) 

グループの条件を使用する場合は、whereの代わりにhavingを使用する必要があります。

+0

実際には、このクエリではMySQLではGROUP BYとHAVINGは必要ありません。 GROUP BYを実行せずに集計関数を使用すると、集計関数は結果セット全体で処理されます。だから、この場合はWHEREでMAXを使用するだけです。 –

0

の変化を知ってみましょうどのように修正すればよいです。

DELETE 
FROM 
    user_log 
WHERE 
    UpdateDate < (SELECT MAX(UpdateDate) 
FROM user_log 
GROUP BY Email 
HAVING Email = user_log.Email) 

DELETEステートメントで削除するフィールドを指定することはできません。

0

は、私はあなたがやろうとしたものではない100%確信していますが、これはあなたのために働くこの

DELETE FROM user_log 
WHERE UpdateDate < (
    SELECT MAX(UpdateDate)  
    FROM user_log AS lookup  
    WHERE Email = lookup.Email 
) 

希望をやろうとすることができます。

+0

maxの場合はgroup byを使用する必要があります。 – Raffael

関連する問題