select
distinct
*
from
表名
distinct
表示去除重復項,必須放到列欄位的前面。
㈡ sql資料庫刪除重復記錄
delete from table where id not in
select min(id) from table group by name,url(如果有其他行辨別那麼也在這里加上)
我保留的是id最小的行,你也可以留最大的行
我沒辦法加括弧,寫了子查詢加了括弧就發不上來
㈢ 如何刪除資料庫中的重復數據
有兩個意義上的重復記錄
①完全重復的記錄,也即所有欄位均重復的記錄。
②部分關鍵欄位重復的記錄,比如Name欄位重復,而其他欄位不一定重復或都重復可以忽略。
1、對於第一種重復,比較容易解決,使用
selectdistinct*fromtableName
這樣就可以得到無重復記錄的結果集。然後通過臨時表實現對數據的維護。
selectdistinct*into#TmpfromtableName
droptabletableName
select*intotableNamefrom#Tmp
droptable#Tmp
#Tmp為什麼系統參數,tableName為要操作的表名。
2、第二類重復問題通常要求保留重復記錄中的第一條記錄,操作方法如下:
假設有重復的欄位為Name,Address,要求得到這兩個欄位唯一的結果集
selectidentity(int,1,1)asautoID,*into#TmpfromtableName
selectmin(autoID)asautoIDinto#Tmp2from#TmpgroupbyName,autoID
select*from#TmpwhereautoIDin(selectautoIDfrom#tmp2)
最後一個select即得到了Name,Address不重復的結果集(但多了一個autoID欄位,實際寫時可以寫在select子句中省去此列)
㈣ Mysql資料庫中多條重復數據,如何只刪除一條
這個需要分情況。
1,你的資料庫表中有主鍵,且主鍵上面的數據為唯一值。也就是沒有重復值。
那麼你在刪除的時候,將這個唯一值作為條件進行刪除。
如:
delete
from
[表名]
where
id=1
2.所有的數據相同,那麼你只能打開數據表,手工選定其中某一條,進行刪除。
㈤ sql刪除重復數據且只保留一條
在你的查詢sql裡面將子查詢的title改成id,外面用id in(),這樣會得到去重後的數據導出insert語句,將表中數據備份刪除,再將導出的sql執行一下即可,還有一種就是寫刪除sql,delete from table where id not in(select id from table group by title )。
㈥ 資料庫中怎麼刪除重復的記錄,只保留唯一的記錄
方法很多,說一個最簡單的。
先建一個表,結構和原來的表一樣,但是在你要去重的列建立一個主鍵,並設置「忽略重復鍵」,把原表中的所有數據插入這個新表,
此時新表中的數據就已經是非重復的了。
把原表數據都刪掉,把新表中的數據都導回來就ok了
㈦ Oracle資料庫重復數據刪除的幾種方法
重復的數據可能有這樣兩種情況,第一種時表中只有某些欄位一樣,第二種是兩行記錄完全一樣。Oracle資料庫重復數據刪除技術有如下優勢:更大的備份容量、數據能得到持續驗證、有更高的數據恢復服務水平、方便實現備份數據的容災。
一、刪除部分欄位重復數據先來談談如何查詢重復的數據吧。
下面語句可以查詢出那些數據是重復的:
select
欄位1,欄位2,count(*)
from
表名
group
by
欄位1,欄位2
having
count(*)
>
1
將上面的>號改為=號就可以查詢出沒有重復的數據了。
想要刪除這些重復的數據,可以使用下面語句進行刪除
delete
from
表名
a
where
欄位1,欄位2
in
(select
欄位1,欄位2,count(*)
from
表名
group
by
欄位1,欄位2
having
count(*)
>
1)
上面的語句非常簡單,就是將查詢到的數據刪除掉。不過這種刪除執行的效率非常低,對於大數據量來說,可能會將資料庫弔死。所以我建議先將查詢到的重復的數據插入到一個臨時表中,然後對進行刪除,這樣,執行刪除的時候就不用再進行一次查詢了。如下:
CREATE
TABLE
臨時表
AS
(select
欄位1,欄位2,count(*)
from
表名
group
by
欄位1,欄位2
having
count(*)
>
1)
上面這句話就是建立了臨時表,並將查詢到的數據插入其中。
下面就可以進行這樣的刪除操作了:
delete
from
表名
a
where
欄位1,欄位2
in
(select
欄位1,欄位2
from
臨時表);
這種先建臨時表再進行刪除的操作要比直接用一條語句進行刪除要高效得多。
這個時候,大家可能會跳出來說,什麼?你叫我
㈧ 如何提取出並刪除資料庫中重復的記錄
我也想知道,於是找了下,一起看看吧
1、查找表中多餘的重復記錄,重復記錄是根據單個欄位(Id)來判斷
select
*
from
表
where
Id
in
(select
Id
from
表
group
byId
having
count(Id)
>
1)
2、刪除表中多餘的重復記錄,重復記錄是根據單個欄位(Id)來判斷,只留有rowid最小的記錄
DELETE
from
表
WHERE
(id)
IN
(
SELECT
id
FROM
表
GROUP
BY
id
HAVING
COUNT(id)
>
1)
AND
ROWID
NOT
IN
(SELECT
MIN(ROWID)
FROM
表
GROUP
BY
id
HAVING
COUNT(*)
>
1);
3、查找表中多餘的重復記錄(多個欄位)
select
*
from
表
a
where
(a.Id,a.seq)
in(select
Id,seq
from
表
group
by
Id,seq
having
count(*)
>
1)
4、刪除表中多餘的重復記錄(多個欄位),只留有rowid最小的記錄
delete
from
表
a
where
(a.Id,a.seq)
in
(select
Id,seq
from
表
group
by
Id,seq
having
count(*)
>
1)
and
rowid
not
in
(select
min(rowid)
from
表
group
by
Id,seq
having
count(*)>1)
5、查找表中多餘的重復記錄(多個欄位),不包含rowid最小的記錄
select
*
from
表
a
where
(a.Id,a.seq)
in
(select
Id,seq
from
表
group
by
Id,seq
having
count(*)
>
1)
and
rowid
not
in
(select
min(rowid)
from
表
group
by
Id,seq
having
count(*)>1)
㈨ 刪除資料庫中重復數據的幾個方法
方法一
declare @max integer,@id integer
declare cur_rows cursor local for select 主欄位,count(*) from 表名 group by 主欄位 having count(*) > 1
open cur_rows
fetch cur_rows into @id,@max
while @@fetch_status=0
begin
select @max = @max -1
set rowcount @max
delete from 表名 where 主欄位 = @id
fetch cur_rows into @id,@max
end
close cur_rows
set rowcount 0
方法二
有兩個意義上的重復記錄,一是完全重復的記錄,也即所有欄位均重復的記錄,二是部分關鍵欄位重復的記錄,比如Name欄位重復,而其他欄位不一定重復或都重復可以忽略。
1、對於第一種重復,比較容易解決,使用 select distinct * from tableName 就可以得到無重復記錄的結果集。
如果該表需要刪除重復的記錄(重復記錄保留1條),可以按以下方法刪除
select distinct * into #Tmp from tableName
drop table tableName
select * into tableName from #Tmp
drop table #Tmp
發生這種重復的原因是表設計不周產生的,增加唯一索引列即可解決。
2、這類重復問題通常要求保留重復記錄中的第一條記錄,操作方法如下:
假設有重復的欄位為Name,Address,要求得到這兩個欄位唯一的結果集
select identity(int,1,1) as autoID, * into #Tmp from tableName
select min(autoID) as autoID into #Tmp2 from #Tmp group by Name,autoID
select * from #Tmp where autoID in(select autoID from #tmp2)
最後一個select即得到了Name,Address不重復的結果集(但多了一個autoID欄位,實際寫時可以寫在select子句中省去此列)
㈩ mysql怎麼刪除重復數據
刪除表中多餘的重復記錄,重復記錄是根據單個欄位(peopleId)來判斷,只留最小的記錄
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
)