【轉】SQL刪除重復數據方法

例如:
id?????????? name???????? value
1?????????????? a???????????????? pp
2?????????????? a???????????????? pp
3?????????????? b???????????????? iii
4?????????????? b???????????????? pp
5?????????????? b???????????????? pp
6?????????????? c???????????????? pp
7?????????????? c???????????????? pp
8?????????????? c???????????????? iii
id是主鍵
要求得到這樣的結果
id?????????? name???????? value
1?????????????? a???????????????? pp
3?????????????? b???????????????? iii
4?????????????? b???????????????? pp
6?????????????? c???????????????? pp
8?????????????? c???????????????? iii

方法1
delete?? YourTable??
where?? [id]?? not?? in?? (
select?? max([id])?? from?? YourTable??
group?? by?? (name?? +?? value))

方法2
delete?? a
from?? 表?? a?? left?? join(
select?? id=min(id)?? from?? 表?? group?? by?? name,value
)b?? on?? a.id=b.id
where?? b.id?? is?? null



查詢及刪除重復記錄的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 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)
(二)
比方說
在A表中存在一個字段“name”,
而且不同記錄之間的“name”值有可能會相同,
現在就是需要查詢出在該表中的各記錄之間,“name”值存在重復的項;
Select Name,Count(*) From A Group By Name Having Count(*) > 1
如果還查性別也相同大則如下:
Select Name,sex,Count(*) From A Group By Name,sex 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子句中省去此列)
(四)
查詢重復
select * from tablename where id in (
select id from tablename
group by id
having count(id) > 1
)

轉自 http://www.cnblogs.com/sunxiaonan/archive/2009/11/24/1609439.html

轉載于:https://www.cnblogs.com/dieaz5/p/3497976.html

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/376157.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/376157.shtml
英文地址,請注明出處:http://en.pswp.cn/news/376157.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

python批處理柵格轉點_python獲取柵格點和面值的實現

1、獲取指定位置的點值:OutputFile open(statisticResultTXT, w)cellvaluearcpy.GetCellValue_management(inputfilepathfilenname".tif",staionXY, "1")OutputFile.write(stationID"_"filenname""str(cellvalue)\n)Outpu…

看看別人的演講

淘寶:http://www.w3cmark.com/2014/137.html 轉載于:https://www.cnblogs.com/gaoxue/p/4330728.html

jsp中獲取WebContent路徑

方法一&#xff1a; 1 <script type"text/javascript" src"../js/data.js"></script> 方法2&#xff1a; 1 <% 2 String path request.getContextPath(); 3 String basePath request.getScheme()"://"request.getServerName()&…

layui文本框填充值_layui輸入框中只允許輸入整數的實現方法

如下所示&#xff1a;//轉化正整數function zhzs(value){value value.replace(/[^\d]/g,);if(!value){value parseInt(value);}return value;}其他的正則function clearNoNum(obj){obj.value obj.value.replace(/[^\d.]/g,""); //清除“數字”和“.”以外的字符ob…

YQL獲取天氣

$(function () { $.getJSON("http://query.yahooapis.com/v1/public/yql?callback?", { q: "select * from json where urlhttp://m.weather.com.cn/data/101210101.html", format: "json" }, function (data) { if (data.query.results) { v…

如何判斷平臺工具集去做條件編譯(VC++目錄、預處理器定義、$(PlatformToolsetVersion))...

作者&#xff1a;zyl910 從VS2010開始&#xff0c;提供了一個平臺工作集&#xff08;Platform ToolSet&#xff09;選項用于配制vc編譯版本。到了VS2012&#xff0c;更是因為默認平臺工具集不支持WindowsXP&#xff0c;導致經常需要切換到xp版平臺工具集&#xff0c;VS2013也是…

gerber文件怎么導貼片坐標_利用Gerber文件生成貼片坐標及元件位置圖的方法技巧...

利用Gerber文件生成貼片坐標及元件位置圖的方法技巧利用Gerber文件生成貼片坐標及元件位置圖的方法技巧2010-10-11 21:59Gerber文件是所有電路設計軟件都可以產生的文件&#xff0c;在電子組裝行業又稱為模版文件(stencil data),在PCB制造業又稱為光繪文件。可以說Gerber文件是…

c#語言基礎編程-轉義符

C#轉義字符: 引言 為了在程序中能夠控制字符的輸出以及區分開雙引號和單引號&#xff08;雙引號和單引號在程序中標示里面的內容為字符串和字符&#xff09;&#xff0c;所以用一種特殊的字符常量&#xff1b;是以反斜線”\”開頭&#xff0c;后跟一個或幾個字符。讓其具有特定…

SQL語言的分類

SQL語言的分類 SQL語言共分為四大類&#xff1a;數據查詢語言DQL&#xff0c;數據操縱語言DML&#xff0c; 數據定義語言DDL&#xff0c;數據控制語言DCL。 1 數據查詢語言DQL Q Query 數據查詢語言DQL用于檢索數據庫基本結構是由SELECT子句&#xff0c;FROM子句&#xff0c;…

圖片圖層隱寫_【軟件】imageIN · 圖影-隱藏文件到圖片,簡單輕快的圖片隱寫工具...

還記得以前的圖種制作嗎&#xff0c;今天給大家分形下一個相關的工具。度盤下載(imageIN Beta1.0 (2.18MB)) &#xff1a;pan.baidu.com/s/1hqve8YS官網下載&#xff1a;本地下載這是一個能把圖片中嵌入文件、文本、隱藏水印的隱寫工具這種嵌入是基于圖像本身的而不是基于文件的…

使用eclipse進行web開發的3個lib文件夾

1、右擊project>Build Path>Configure Build Path&#xff08;一般是在你的項目文件夾中手動創建一個lib文件夾&#xff0c;里面設置若干子文件夾存放不同的jar包&#xff0c;然后通過Configure Build Path導入&#xff09; 存放&#xff1a;eclipse用來編譯java文件、編…

mysql 密碼長度約束_MySQL簡單操作【1、在cmd下MySQL的運行及簡單增刪改查】

上篇文章介紹了在Windows10下安裝MySQL&#xff0c;本篇文章介紹cmd下簡單的操作。1、登錄 MySQL當 MySQL 服務已經運行時, 我們可以通過 MySQL 自帶的客戶端工具登錄到 MySQL 數據庫中, 首先打開命令提示符, 輸入以下格式的命名:mysql -h 主機名 -u 用戶名 -p參數說明&#xf…

asp.net中,%#%,%=%和%%分別是什么意思,有什么區別

在asp.net中經常出現包含這種形式<%%>的html代碼,總的來說包含下面這樣幾種格式&#xff1a; 一. <%%> 這種格式實際上就是和asp的用法一樣的&#xff0c;只是asp中里面是vbscript或者javascript代碼&#xff0c;而在asp.net中是.net平臺下支持的語言。 特別注意:…

mysql十大報錯_MySQL十大報錯函數

1.Floor()round() 遵循四舍五入把原值轉化為指定小數位數&#xff0c;如&#xff1a;round(1.45,0) 1;round(1.55,0)2floor()向下舍入為指定小數位數 如&#xff1a;floor(1.45,0) 1;floor(1.55,0) 1ceiling()向上舍入為指定小數位數 如&#xff1a;ceiling(1.45,0) 2;ceili…

.NET Framework 4 不能先解壓再使用setup.exe安裝的解決方法

微軟.NET Framework離線安裝包有時無法做到斷網離線安裝&#xff0c;仍然需要下載某些文件后才能繼續安裝&#xff0c;速度慢不說&#xff0c;安裝前還必須要聯網。 這時就可以自己用7z什么的解壓微軟的安裝包&#xff0c;然后收集整合要下載的文件后&#xff0c;就可以通過解壓…

密碼強度正則

6位數字字母特殊字符 |6位數字、字母、特殊字符兩兩組合 | 6位 var threeRegex new RegExp("^(?.{6,})(?.*[a-zA-Z])(?.*[0-9])(?.*\\W).*$", "g"); var twoRegex new RegExp("^(?.{6,})(((?.*[a-zA-Z])(?.*\\W))|((?.*[0-9])(?.*\\W))|((…

laravel mysql 隊列_Laravel 隊列使用

Laravel 隊列使用1.修改根目錄.env文件的 **QUEUE_CONNECTION **字段配置為 databaseLaravel可配置多種隊列驅動&#xff0c;包括 "sync", "database", "beanstalkd", "sqs", "redis", "null"(具體參見app/config…

高手速成android開源項目【項目篇】

主要介紹那些Android還不錯的完整項目&#xff0c;目前包含的項目主要依據是項目有意思或項目分層規范比較好。Linux項目地址&#xff1a;https://github.com/torvalds/linuxAndroid項目地址&#xff1a;https://android.googlesource.com/或https://github.com/android以上兩個…

Swift基礎語法: 30 - Swift的基類, 子類, 重寫, 重寫方法, 重寫屬性, 防止重寫

前面我們講了有關于腳本語法的基本認識以及使用, 現在讓我們來看看Swift的其他東西: 1.基類 所謂的基類, 就是OC中的父類, 不繼承任何類, 就叫做基類, 讓我們來看看例子: class Vehicle {var currentSpeed 0.0var description: String {return "traveling at \(currentSp…

機器學習1k近鄰

自己一直學習計算機視覺方面的東西&#xff0c;現在想學習一下數據挖掘跟搜索引擎&#xff0c;自己基礎也有點薄弱&#xff0c;看朱明的那本數據挖掘&#xff0c;只能片面的了解這個數據挖掘。不過最近有一本書 機器學習實戰&#xff0c;于是乎通過實戰的形式了解一下基本的算法…