SQLite3:删除重复项

Gai*_*aia 5 sqlite duplication

鉴于下表

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)
);
Run Code Online (Sandbox Code Playgroud)

我想删除addressbody相同的所有行。换句话说,根据address和消除重复body,只留下第一次出现。

Kas*_*dry 14

如果您只想消除具有相似内容的两行的歧义,您可以使用SQLite3 中的ROWID功能,它有助于唯一标识表中的每一行。

像这样的东西:

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

应该可以让您获得具有最小 rowid 的行,这将是该行在表中的第一次出现。

但是,请务必在事务中运行它,以确保它完全符合您的要求,当然,请事先进行备份。=)