關于SQL查詢重復語句
經過試驗,下面的方法能滿足你的要求。
Sql Server里面如果沒有設定主鍵而刪除重復數據很麻煩:
一:保留重復記錄中的一條記錄,其他全部刪除。
--1:建立臨時表,把不重復的數據轉存
select distinct * into #Tmp from 表名;
--2:刪除原表數據
truncate table 表名;
--3:將數據導回
insert into 表名 select * from #Tmp;
--4:刪除臨時表
drop table #Tmp;
******************
如果是oracle的話,把 rowid 查出來,按照rowid刪除就可以了。
select rowid,表名.* from 表名;
delete from 表名 where rowid != '剛才查詢出的某個值'
commit;
******************
補充:如果你的表中只有這兩個字段的話,用上面的方法就能達到你的要求。
如果不是,用查詢分析器打開這個標,選重要刪除的數據,右鍵刪除即可,比sql來的簡單的多。
---
以上,希望對你有所幫助。
如何用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語句刪除表中重復記錄
數據庫結構的腳本: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語句
給你簡化一下思路:
當前表結構
Create Table tb(Id Int, Name Varchar2(10), sex Varchar2(10));
--初始數據
Insert Into tb Values(1,'11','x');
Insert Into tb Values(2,'22','y');
Insert Into tb Values(3,'11','z');
Insert Into tb Values(4,'11','w');
Insert Into tb Values(5,'22','i');
需求:對name單個的取出 + name多個相同的取一個(比如id最小的);
Select *
From Tb
Where Name In (Select Name
From (Select Name, Count(*) Total From Tb Group By Name) Tb1
Where Total = 1)
Union All
Select *
From Tb
Where Id In (Select Id
From (Select Name, Min(Id) Id
From Tb
Where Name In (Select Name
From (Select Name, Count(*) Total
From Tb
Group By Name) Tb2
Where Total >1) Group By Name) Tb3);
對你的具體需求,有多個條件項的可以繼續加入,我沒繼續按你的表結構做下去;
以上SQL親自驗證,返回正確結果;
如果不通或者你的表結構、sql不能通過的話,可發站內信給我;
(時間問題,沒做SQL優化)
怎么利用SQL語句查詢數據庫中具體某個字段的重復行
可用group by……having來實現。
可做如下測試:
1、創建表插入數據:
create table test
(id int,
name varchar(10))
insert into test values (1,'張三')
insert into test values (2,'李四')
insert into test values (3,'張三')
insert into test values (4,'王五')
insert into test values (5,'趙六')其中name是張三的有兩行,也就是重復行。
2、執行sql語句如下:
select * from test where name in
(select name from test group by name having COUNT(*)>1)結果如圖: