10

最大値に基づいて行を削除するように mySQL クエリを構成するにはどうすればよいですか。

私は試した

WHERE jobPositonId = max(jobPostionId)

しかし、エラーが発生しましたか?

4

4 に答える 4

20
DELETE FROM table ORDER BY jobPositonId DESC LIMIT 1
于 2010-09-01T19:20:49.230 に答える
16

使用する:

DELETE FROM TABLE t1 
       JOIN (SELECT MAX(jobPositonId) AS max_id FROM TABLE) t2 
 WHERE t1.jobPositonId  = t2.max_id

重複がある場合、その値を持つすべての行が削除されることに注意してください。jobPositonId

1093 エラーの愚かな部分は、自己参照の間にサブクエリを配置することで回避できることです。

DELETE FROM TABLE
 WHERE jobPositonId = (SELECT x.id
                         FROM (SELECT MAX(t.jobPostionId) AS id 
                                 FROM TABLE t) x)

説明

UPDATE&DELETEステートメントを使用する場合、MySQL は、更新されている同じテーブルへの最初のレベルのサブクエリがあるかどうかのみをチェックします。そのため、2 番目のレベル (またはより深いレベル) のサブクエリの代替として機能します。ただし、サブクエリのみをチェックしています。JOIN 構文は論理的に同等ですが、エラーは発生しません。

于 2010-09-01T18:27:22.443 に答える
0

これは機能します:

SELECT @lastid := max(jobPositonId ) from t1; 
DELETE from t1 WHERE jobPositonId = @lastid ; 

データベースに 2 回アクセスする以外に、この手法に問題はありますか?

于 2012-06-07T16:03:20.267 に答える
0
DELETE FROM `table_name` WHERE jobPositonId = (select max(jobPostionId) from `table_name` limit 1)

また

DELETE FROM `table_name` WHERE jobPositonId IN (select max(jobPostionId) from `table_name` limit 1)
于 2010-09-01T18:28:00.850 に答える