access 如果刪除相同行 轉 sqlite也可

2021-07-09 11:52:40 字數 1251 閱讀 8112

不好意思,之前回答有些筆誤。

這麼大的資料量,實現樓主這個目的我看可以分步予以實現:

a. 如果原始表不含唯一標識字段

第一步 取出原始表(假設表名為「a」)中無重複的記錄行,到乙個新錶中取名「newa」

執行sql生成表查詢: select distinct * into newa from a

即可將原始無重複的記錄存入新錶「newa」中

第二步 檢查新錶中記錄無誤後,刪除原始表

第三步 重新命名新錶為原始表名,到此大功告成。

b. 如果原始表含有唯一標識字段,假設該欄位名為「id」,其它欄位名為:a,b.c,...

方法1)執行下列查詢即可。此法一步完成,但是由於資料量非常大,耗時可能會很長,例如幾個小或者十幾小時以上等

delete from a where id not in(select max(id) from a group by a,b,c,...)

方法2)如果原始表唯一標識字段(id)沒有特定的意義,則可以這樣做以減少耗時

第一步 建立乙個新錶(newa),建立唯一標識字段(id)資料型別為自增id,其它欄位與原始表對應字段同名兼同資料型別(即結構一樣)

第二步 執行下列追加sql查詢,將原始表中無重複的記錄(注意:不含id欄位)追加到新錶中

insert into newa(a,b,c,...) select distinct a,b,c,... from a

第三步 檢查新錶中記錄無誤後,刪除原始表

第四步 重新命名新錶為原始表名,到此大功告成。

由於方法1)使用"not in" 運算,資料庫引擎完全不能優化,大資料表時效率極低,不建議使用。下面再給出乙個不使用「not」關鍵字的方法。

方法3)此方法也可以像方法1)一樣,一步到位,一次性刪除有兩條或以上重複的記錄,僅保留有重覆記錄中id 最小的那條記錄,其效率要比方法1)高出至少乙個數量級。只適合含有唯一標識的資料表(假設資料表有id,a,b,c四個字段,下列語句中t、t1、id1分別是子查詢表別名和字段別名)

delete from a

where id in(select id from

(select a.id,t.id1 from a left join

(select min(id) as id1 from a group by a,b,c)t

on a.id=t.id1)t1 where t1.id1 is null);

***請注意:執行上列步驟時,請備份原始access資料庫以免造成資料丟失!!!

SQL 語句刪除access重覆記錄語句

有兩個意義上的重覆記錄,一是完全重複的記錄,也即所有欄位均重複的記錄,二是部分關鍵字段重複的記錄,比如name欄位重複,而其他欄位不一定重複或都重複可以忽略。1 對於第一種重複,比較容易解決,使用 select distinct from tablename 就可以得到無重覆記錄的結果集。如果該錶需...

刪除SQL資料庫中相同記錄的SQL語句

資料庫種馬 資料庫中很多表存在大量相同記錄 經高人指點刪除相同記錄 僅保留乙個 的sql語句如下 declare tmptb table id int not null sortname nvarchar 100 collate chinese prc ci as null sortnote nva...

ACCESS中用SQL語句建立表,修改,刪除表

1.建立表 create table t test id counter 1,1 primary key,u name varchar 50 fatherid int id counter 1,1 primary key 設定id 為主鍵並自動增長 2.修改字段型別 sql alter table ...