Sqlite

SQLite3:刪除重複項

  • March 17, 2022

給定下表

CREATE TABLE `sms` (
   `_id`   INTEGER,
   `thread_id` INTEGER,
   `address`   TEXT,
   `person`    INTEGER,
   `date`  INTEGER,
   `protocol`  INTEGER,
   `read`  INTEGER DEFAULT 0,
   `status`    INTEGER DEFAULT -1,
   `type`  INTEGER,
   `reply_path_present`    INTEGER,
   `subject`   TEXT,
   `body`  TEXT,
   `service_center`    TEXT,
   PRIMARY KEY(_id)
);

我想刪除所有相同的addressbody。換句話說,根據address和消除重複body,只留下第一次出現。

如果您只是想區分具有相似內容的兩行,可以使用 SQLite3 中的ROWID功能,它有助於唯一標識表中的每一行。

像這樣的東西:

DELETE FROM sms WHERE rowid NOT IN (SELECT min(rowid) FROM sms GROUP BY address, body);

應該可以為您提供具有最小 rowid 的行,這將是該行在表中的第一次出現。

但是,請務必在事務中執行它,以確保它完全符合您的要求,當然,請事先進行備份。=)

引用自:https://dba.stackexchange.com/questions/116868