2011-08-08 11 views
11

私は(URLの)次の列を持つテーブルがあるを削除しますすべてがすべて訪問されている場合など)SQLは、いくつかのものを除くすべての行

これは単一クエリで可能ですか?とにかくそれを行うための最高のクエリ(クエリ)は何ですか?事前に

おかげ

+0

良い質問、1を使用する必要が。 10は削除クエリに残っています –

答えて

19

私は、TOPがsqliteの中で働くとは思わない - LIMIT

DELETE FROM mytable WHERE id NOT IN ( 
    SELECT id FROM mytable 
    WHERE visited = false 
    ORDER BY timestamp DESC 
    LIMIT 10 
    ) 
+0

+1 - 構文とフィールド名を修正しました。うわー! :) – MatBailie

+0

これは10レコードを最大削除しませんか? OPはすべて* *を削除しますが、@ 1 –

+0

@Shredder:いいえ、 'WHERE'節は' id NOT IN(...) 'で、サブクエリは保持する10行を選択します。他人。 – cdhowie

5
DELETE FROM tableofDeletion 
WHERE 
    -- Delete all items not in the following select 
    -- ordered by the timestamp so we can get the top 10 
    id NOT IN (SELECT id 
      FROM tableofDeletion 
      WHERE 
       visited = 0 -- false 
      ORDER BY timestamp DESC 
      LIMIT 10) 

私は、これはあなたが探しているものを提供しますと思います。

+0

あなたは 'visited = true'を必要としません、sqliteはLIMITを使用しTOPはありません、" unvisited "フィールドはありません;) – MatBailie

+0

Man、それは私にとっては失敗です。 ;) – Travis

関連する問題