當前位置:首頁 » 編程語言 » sql消除重復行

sql消除重復行

發布時間: 2022-04-14 02:40:06

sql如何刪除重復的數據行

SQL Server刪除重復行是我們最常見的操作之一,下面就為您介紹六種適合不同情況的SQL Server刪除重復行的方法,供您參考。
1.如果有ID欄位,就是具有唯一性的欄位
delect table tableName where id not in ( select max(id) from table group by col1,col2,col3... )
group by 子句後跟的欄位就是你用來判斷重復的條件,如只有col1,那麼只要col1欄位內容相同即表示記錄相同。
2. 如果是判斷所有欄位也可以這樣 ,【對於表中的指定的欄位的進行檢查是否相同】
select * into #temp from tablename group by id1,id2,....
delete tablename
insert into table select * from #temp
drop table #temp
3. 首先去重復,再獲取N*1條數據插入到臨時表中,【對於表中的所有欄位的進行檢查是否相同】,再將原表的數據刪除,然後將臨時表的數據插入到原表,最後刪除臨時表。
select distinct * into #temp from tablename
delete tablename
go
insert tablename select * from #temp
go
drop table #temp

4. 沒有ID的情況
select identity(int,1,1) as id,* into #temp from tabel
delect # where id not in (
select max(id) from # group by col1,col2,col3...)
delect table
inset into table(...)
select ..... from #temp
5. col1+','+col2+','...col5 聯合主鍵
select * from table where col1+','+col2+','...col5 in (
select max(col1+','+col2+','...col5) from table
where having count(*)>1
group by col1,col2,col3,col4
)
group by 子句後跟的欄位就是你用來判斷重復的條件,如只有col1,那麼只要col1欄位內容相同即表示記錄相同。
6.
select identity(int,1,1) as id,* into #temp from tabel
select * from #temp where id in (
select max(id) from #emp where having count(*)>1 group by col1,col2,col3...)

㈡ sql如何刪除TA表中重復行,只保留重復行的一行急啊,

SQL Server 的處理辦法

-- 首先創建測試表
CREATE TABLE test_delete(
name varchar(10),
value INT
);
go

-- 測試數據,其中 張三100 與 王五80 是完全一樣的
INSERT INTO test_delete
SELECT '張三', 100
UNION ALL SELECT '張三', 100
UNION ALL SELECT '李四', 80
UNION ALL SELECT '王五', 80
UNION ALL SELECT '王五', 80
UNION ALL SELECT '趙六', 90
UNION ALL SELECT '趙六', 70
go

-- 首先查詢一下, ROW_NUMBER 效果是否滿足預期
SELECT
ROW_NUMBER() OVER (PARTITION BY name, value ORDER BY (SELECT 1) ) AS no,
name,
value
FROM
test_delete

no name value
----- ---------- -----------
1 李四 80
1 王五 80
2 王五 80
1 張三 100
2 張三 100
1 趙六 70
1 趙六 90

從結果上可以看到,如果有重復的,完全一樣的話, no 是有大於1的。

-- 創建視圖
CREATE VIEW tmp_view AS
SELECT
ROW_NUMBER() OVER (PARTITION BY name, value ORDER BY (SELECT 1) ) AS no,
name,
value
FROM
test_delete

-- 刪除 視圖中的 no 不等於 1 的數據。
1> DELETE FROM tmp_view WHERE no != 1
2> go

(2 行受影響)
1>
2> select * from test_delete;
3> go
name value
---------- -----------
張三 100
李四 80
王五 80
趙六 90
趙六 70

(5 行受影響)

結果看上去是滿足預期的。

㈢ SQL消去重復行

你這個不對啊
重復行的,一個都沒有的
select distinct t.* from t;
沒有重復的行

㈣ 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 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(*)>1)

㈤ sql去除重復行

這個簡單了,相信你要的只是查詢結果
但是重復的只是名字吧?

select disinct name from a這樣就可以了

如果想顯示其他列,可以告訴你這是不可能的
比如說 小紅 那後面對應的日期和前面的ID你要計算機來顯示哪個?

㈥ 如何將sql中消除重復行

當使用
SELECT
語句時,您可能不想要返回重復信息。例如,STAFF
有一個其中多次列出了幾個部門編號的
DEPT
列,以及一個其中多次列出了幾個工作說明的
JOB
列。

要消除重復行,在
SELECT
子句上使用
DISTINCT
選項。例如,如果將
DISTINCT
插入該語句,則部門中的每項工作僅列出一次:


SELECT
DISTINCT
DEPT,
JOB
FROM
STAFF
WHERE
DEPT
<
30
ORDER
BY
DEPT,
JOB

DISTINCT
已消除了在
SELECT
語句中指定的一組列中所有包含重復數據的行。

㈦ sql 查詢去除重復行

order by (select 1)與order by 1一樣按第一列排序,按照查詢的結果集第一列排序

㈧ SQL消除結果集中的重復行

distinct
關鍵字可從
select
語句的結果中除去重復的行。如果沒有指定
distinct,那麼將返回所有行,包括重復的行。例如,如果在
titleauthor
中選擇所有作者
id
時未使用
distinct,那麼將會返回下列行(其中包括一些重復的行):
use
pubs

㈨ 求SQL消除重復數據語句

select * from #t1
union
select * from #t2
這條語句一起執行是把兩個表中唯一的查詢出來,如果用union all會把兩個表中的結果並集起來

㈩ sql 語句如何消除重復數據行

select
*
from
表1,表2
where
表1.id=表2.表1id
and
表2.科目='語文'
是這個意思不??
這樣就查出每個人的一條記錄,
只是語文成績,
你如果需要其他科目
可以把科目後改成
數學或者外語,不過
你表達的真是不清楚,
標題寫的是刪除重復行,可是
你的數據
沒有重復數據,這樣的外鍵存在是很正常的,為什麼非要顯示一條,,搞不懂,

熱點內容
雲伺服器ecs服務條款 發布:2025-01-20 19:19:36 瀏覽:46
安卓系統顯示屏怎麼設置屏保 發布:2025-01-20 19:18:53 瀏覽:895
有鎖機和配置鎖哪個好 發布:2025-01-20 19:18:05 瀏覽:766
安卓版軟體如何設置 發布:2025-01-20 18:58:53 瀏覽:57
java中級項目案例 發布:2025-01-20 18:58:52 瀏覽:912
sql日誌查看工具 發布:2025-01-20 18:57:12 瀏覽:242
資料庫刪除表格 發布:2025-01-20 18:51:22 瀏覽:439
c語言head 發布:2025-01-20 18:41:36 瀏覽:736
xboxone絕地求生怎麼設置伺服器 發布:2025-01-20 18:22:12 瀏覽:176
編譯字母表 發布:2025-01-20 18:20:38 瀏覽:243