2011-08-19 19 views
42

これはどのように私はこのクエリで欲しいものを達成することができます...おそらく簡単なものです:MySQLのサブクエリの制限

delete from posts where id not in 
(SELECT id FROM posts order by timestamp desc limit 0, 15) 

をので、一言で言えば、それを置くために、私はにISNすべての投稿を削除したいです'オントン最新15

私はそのクエリをしようとすると、私は、MySQLはまだサポートされていないことを得る' LIMIT & IN/ALL/ANY/SOMEサブクエリ

EDITを

 
mySQL Server version: 5.5.8 
mySQL Client version: mysqlnd 5.0.7-dev - 091210 - $Revision: 304625 $ 
Error: #1235 - This version of MySQL doesn't yet support 'LIMIT & IN/ALL/ANY/SOME subquery' 
+0

MySQLのバージョンは何ですか? MySQLが提供するEXACTエラーは何ですか? – Shef

答えて

124

これを試してみてください:

DELETE 
FROM posts 
WHERE id not in (
     SELECT * FROM (
      SELECT id 
      FROM posts 
      ORDER BY timestamp desc limit 0, 15 
    ) 
     as t); 
+0

これは答えです、あなたはちょうど最終的な閉鎖親子がありません –

+0

あなたは正しいです。必要以上に括弧を1つ追加しました。 :) –

+6

ありがとうございます。これはうまくやっていますが、うまくいけばうれしいです。 – Jase

8

あなたがこの試すことができます:あなたはorder.You降順で注文した場合、最新の15は常に最初の15から来るので

DELETE 
    p1.* 
FROM 
    posts p1 INNER JOIN 
    (SELECT 
      id 
    FROM 
      posts 
      ORDER BY timestamp DESC 
      LIMIT 0, 15 
    ) AS p2 
ON p1.id = p2.id; 
1

はただのIDを削除することができますそれは最初の15.にそれをしませんでしたので、私はそれを試したとうまくいった。うまくいけば助けてくれる人

Delete from `table` where id not in (SELECT * FROM (Select id from `table` order by id desc limit 15) as derivedTable);