當前位置:首頁 » 編程語言 » sql重復鍵的處理方法
擴展閱讀
webinf下怎麼引入js 2023-08-31 21:54:13
堡壘機怎麼打開web 2023-08-31 21:54:11

sql重復鍵的處理方法

發布時間: 2023-06-25 23:52:39

1. sql如何刪除重復的行啊 我每次執行後都多出重復的行,可是不知道怎麼刪除掉,誰幫幫忙 在線等答案

如果表中有多組完全不同的重復的 PK 值,則逐個刪除它們會很費時間。在這種情況下,可使用下面的方法:

1.首先,運行上面的 GROUP BY 查詢來確定有多少組重復的 PK 值及每組的重復數。

2.選擇重復的鍵值放入臨時表中。例如:

SELECT col1, col2, col3=count(*)
INTO holdkey
FROM t1
GROUP BY col1, col2
HAVING count(*) > 1

3.選擇重復的行放入臨時表中,以清除進程中的重復值。例如:

SELECT DISTINCT t1.*
INTO holdps
FROM t1, holdkey
WHERE t1.col1 = holdkey.col1
AND t1.col2 = holdkey.col2

4.此時,holdps 表應有唯一的 PK;但是,如果 t1 有重復的 PK 而行唯一(如上面的 SSN 示例),情況就不是這樣了。請驗證 holdps 中的各個鍵是否唯一,是否沒有鍵重復而行唯一的情況。如果是這樣,您必須停在該處,確定對於給定重復的鍵值,您希望保留哪些行。例如,以下查詢:

SELECT col1, col2, count(*)
FROM holdps
GROUP BY col1, col2

應為各行返回計數 1。如果結果是 1,請繼續執行下面的步驟 5。如果不是 1,則存在鍵重復而行唯一的情況,且需要您決定要保存哪些行。通常,這將需要舍棄行或為此行創建新的唯一的鍵值。為 holdps 表中每個此種重復 PK 執行這兩個步驟之一。

5.從原始表中刪除重復的行。例如:

DELETE t1
FROM t1, holdkey
WHERE t1.col1 = holdkey.col1
AND t1.col2 = holdkey.col2

6.將唯一行放回原始表中。例如:

INSERT t1 SELECT * FROM holdps

2. sql如何刪除重復數據

sql查詢去除重復值語句
sql 單表/多表查詢去除重復記錄
單表distinct
多表group by
group by 必須放在 order by 和 limit之前,不然會報錯
************************************************************************************
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 peopleId in (select peopleId from people group by peopleId having count(peopleId) > 1)
and rowid not in (select min(rowid) from people group by peopleId having count(peopleId )>1)
3、查找表中多餘的重復記錄(多個欄位)
select * from vitae a
where (a.peopleId,a.seq) in (select peopleId,seq from vitae group by peopleId,seq having count(*) > 1)
4、刪除表中多餘的重復記錄(多個欄位),只留有rowid最小的記錄
delete from vitae a
where (a.peopleId,a.seq) 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 (a.peopleId,a.seq) 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(*)>

3. sql資料庫中出現重復行數據,如何刪除這些重復記錄

示例

假設存在一個產品信息表Procts,其表結構如下:

CREATETABLEProcts(
ProctIDint,
ProctNamenvarchar(40),
Unitchar(2),
UnitPricemoney
)

表中數據如圖:

*fromProcts_tempdroptableProcts_temp


這樣就完成了對表中重復記錄的刪除。無論表有多大,它的執行速度都是相當快的,而且因為幾乎不用寫語句,所以它也是很安全的

4. sql語句查詢出的兩行數據除了主鍵其他都一樣,怎麼去掉重復數據

1、首先創建一個百位表稿態,並在該表中插入重復的記錄,如下圖所示。