一、SQL語句刪除重復的記錄
COL1 中有重復記錄(COL1,COL2為主鍵),如何刪除 1、有少數重復記錄(在col1,col2上有索引比較好) DELETE T WHERE (COL1,COL2) IN (SELECT COL1,COL2 FROM T GROUP BY COL1,COL2 HAVING COUNT(*) > 1) AND ROWID NOT IN (SELECT MIN(ROWID) FROM T GROUP BY COL1,COL2 HAVING COUNT(*) > 1) 2、大部份記錄有重復記錄 DELETE T WHERE ROWID NOT IN (SELECT MIN(ROWID) FROM T GROUP BY COL1,COL2) 3、其他寫法 DELETE T WHERE ROWID IN (SELECT * FROM T A,T B WHERE *1=*1 AND *2 = *2 AND * > *) ###################################### 10. 刪除重復記錄 最高效的刪除重復記錄方法 ( 因為使用了ROWID) DELETE FROM EMP E WHERE * > (SELECT MIN(*) FROM EMP X WHERE *_NO = *_NO); 11. 用TRUNCATE替代DELETE 當刪除表中的記錄時,在通常情況下, 回滾段(rollback segments ) 用來存放可以被恢復的信息. 如果你沒有COMMIT事務,ORACLE會將數據恢復到刪除之前的狀態(準確地說是 恢復到執行刪除命令之前的狀況) 而當運用TRUNCATE時, 回滾段不再存放任何可被恢復的信息.當命令運行后,數據不能被恢復.因此很少的資源被調用,執行時間也會很短. (譯者按: TRUNCATE只在刪除全表適用,TRUNCATE是DDL不是DML) 12. 盡量多使用COMMIT 只要有可能,在程序中盡量多使用COMMIT, 這樣程序的性能得到提高,需求也會因為COMMIT所釋放的資源而減少: COMMIT所釋放的資源: a. 回滾段上用于恢復數據的信息. b. 被程序語句獲得的鎖 c. redo log buffer 中的空間 d. ORACLE為管理上述3種資源中的內部花費。
二、如何寫出一個SQL語句 ,查詢出數據庫的重復記錄行
看下面這個例子,可以應該可以幫你實現:表KILOID CREDIT100 100100 100101 122101 122111 222113 223CREATE TABLE KILO (ID INT ,CREDIT INT)INSERT INTO KILO VALUES(100,100)INSERT INTO KILO VALUES(100,100)INSERT INTO KILO VALUES(101,122)INSERT INTO KILO VALUES(101,122)INSERT INTO KILO VALUES(111,222)INSERT INTO KILO VALUES(113,223)SQL實現查詢出重復記錄行:SELECT * FROM KILO WHERE ID IN (SELECT ID FROM KILO GROUP BY ID HAVING COUNT(ID)<2)。
三、如何使用一條SQL語句刪除表中重復記錄
數據庫結構的腳本:if exists (select * from dbo。
sysobjects where id = object_id(N'[dbo]。[TempA]') and OBJECTPROPERTY(id, N'IsUserTable') = 1)drop table [dbo]。
[TempA]GO CREATE TABLE [dbo]。[TempA] ( [id] [int] IDENTITY (1, 1) NOT NULL , [PositionName] [varchar] (256) COLLATE Chinese_PRC_CI_AS NULL , [EnglishPositionName] [varchar] (256) COLLATE Chinese_PRC_CI_AS NULL ) ON [PRIMARY]GOALTER TABLE [dbo]。
[TempA] ADD CONSTRAINT [PK_TempA] PRIMARY KEY CLUSTERED ( [id] ) ON [PRIMARY] GOTempA表中有三個字段,id唯一且為主鍵,自動增長; PositionName,EnglishPositionName中有重復的記錄,比如:id PositionName EnglishPositionName20 其他 Others21 質量工程師 QC Engineer 22 其他 Others。 。
。100 質量工程師 QC Engineer 需要剔除重復的"其他","質量工程師"等記錄。
采用的SQL語句:Delete from TempA where id not in ( select max(t1。id) from TempA t1 group by t1。
PositionName,t1。EnglishPositionName)說明: (1)需要剔除那幾個用于判斷重復的字段,則將它們放在group by語句之后。
(2)max(t1。id) 也可以改成:min(t1。
id)。
四、幾個刪除重復記錄的SQL語句
用SQL語句,刪除掉重復項只保留一條在幾千條記錄里,存在著些相同的記錄,如何能用SQL語句,刪除掉重復的呢1、查找表中多余的重復記錄,重復記錄是根據單個字段(peopleId)來判斷 select * from people where peopleId in (select peopleId from people group by peopleId having count(peopleId) > 1) 2、刪除表中多余的重復記錄,重復記錄是根據單個字段(peopleId)來判斷,只留有rowid最小的記錄 delete from people where peopleName in (select peopleName from people group by peopleName having count(peopleName) > 1) and peopleId not in (select min(peopleId) from people group by peopleName having count(peopleName)>1) 3、查找表中多余的重復記錄(多個字段) select * from vitae a where (*Id,*) in (select peopleId,seq from vitae group by peopleId,seq having count(*) > 1) 4、刪除表中多余的重復記錄(多個字段),只留有rowid最小的記錄 delete from vitae a where (*Id,*) in (select peopleId,seq from vitae group by peopleId,seq having count(*) > 1) and rowid not in (select min(rowid) from vitae group by peopleId,seq having count(*)>1) 5、查找表中多余的重復記錄(多個字段),不包含rowid最小的記錄 select * from vitae a where (*Id,*) in (select peopleId,seq from vitae group by peopleId,seq having count(*) > 1) and rowid not in (select min(rowid) from vitae group by peopleId,seq having count(*)>1) 6.消除一個字段的左邊的第一位: update tableName set [Title]=Right([Title],(len([Title])-1)) where Title like '村%' 7.消除一個字段的右邊的第一位: update tableName set [Title]=left([Title],(len([Title])-1)) where Title like '%村' 8.假刪除表中多余的重復記錄(多個字段),不包含rowid最小的記錄 update vitae set ispass=-1where peopleId in (select peopleId from vitae group by peopleId。
五、SQL語句如何查詢記錄中重復最多的記錄
陽光上的橋 你這個不行的 一般ID不會重復所有 count(*)>1 還能查
如果重復的是多個的 比如名稱 aaa重復3次 bbb重復2次 那么你的代碼就會把aaa和bbb全部讀出來 而不是 重復最多 的
我是這樣想的,比如說重復的是名稱name 則查詢按名稱分組的按統計排序的第一條(倒序,數字越大的排前面),這樣求出的名稱就是重復最多的名稱。
select top 1 name from a1 group by name order by count(*) desc
轉載請注明出處華閱文章網 » sql語句重復的記錄