web-dev-qa-db-ja.com

PostgreSQL DELETE FROM(SELECT * FROM FETCH FIRST 10 ROWS ONLY)

PostgreSQLで数行のみを削除するにはどうすればよいですか?サブクエリで削除する10行をフェッチしたい。

私のテーブル

enter image description here

14
ArthurDatur

次のように、要件に従ってwhere条件を使用する必要があります。

delete from mytable where id in(1,2,3,4,5,6,7,8,9,10)

または

delete from mytable where id in(select id from mytable where someconditon)

または、 ctid を使用してトップ10を削除する場合は、このように試すことができます。

DELETE FROM mytable 
WHERE ctid IN (
    SELECT ctid
    FROM mytable 
    GROUP BY s.serialId, s.valuetimestamp
    ORDER BY s.serialId
    LIMIT 10
)

テーブルから重複を削除する場合は、次のことを試してください。

DELETE FROM mytable
 WHERE ctid NOT IN
  (SELECT MAX(s.ctid)
    FROM table s
    GROUP BY s.serialId, s.valuetimestamp);
27
Rahul Tripathi

テーブルに一意の識別子(シリアル、それを "id"と呼びましょう)がある場合は、次のようにします。

DELETE FROM table WHERE table.id IN (SELECT table.id FROM table WHERE *whatever*)

「LIMIT 0,10」のようなものを追加するかしないか

0
Julo0sS