SQL server 搜索重复记录的例子

  在设计数据库的时候,要考虑用户表是否存在重复,因为一般的一个用户表是不允许两个用户名相同的记录的,因为一旦有相同的,那么当用户以此用户名登陆,到底他是属于哪一条记录的呢?
    在防止这种情况的发生的,应该三管齐下,其中最重要的是在设计数据库的时候,就要UNIQUE唯一索引某个字段。

三种方式分别是:增加数据库UNIQUE索引,脚本里面SELECT是否存在用户名,AJAX远程访问接口是否存在用户名。

第一种方法:唯一索引某个字段,能够使多次异步请求插入的数据,都确保唯一存在数据库,唯一牺牲的就是数据库的性能,但是为了系统的稳定性,这个性能必须牺牲。

第二种方法:插入的程序脚本,执行一个SELECT语句查看数据库是否存在,这种方法也会牺牲一定的效率,建议可以忽略。

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)
--by www.jbxue.com
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)

第三种方法:在用户注册的时候,就远程AJAX查询用户名是否存在,如果存在则不提交表单,此举能够大大提高用户体验。

select FIELD from TABLE
group by FIELD
having(count(*))>1

上面能够找到TABLE表中FIELD字段重复的记录,显示在查询窗口中,这样子搜索的都是存在2条或者2条以上重复记录的结果集。

总结,为了避免用户名字段的重复情况,最好的方法,还是在SQL SERVER数据库进行UNIQUE唯一索引的约束

时间: 2024-10-28 15:13:52

SQL server 搜索重复记录的例子的相关文章

SQL Server 删除重复记录的几种方法

  例如: 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 del

mysql sql DISTINCT 删除重复记录

mysql教程 sql  distinct  删除重复记录 如何在mysql中使用distinct关键字过滤在一个select语句的结果列表重复值 如果你在查询数据时想删除重复的数据,可以利用distinct关键字过滤重复值,下面看下distinct用法. select distinct column_name from table_name; 让我们来看看一个简单的例子,我们有一个汽车列表.每辆车都有一个id,品牌,类型和颜色,但现在我们只是简单的列出所有品牌: select brand fr

分享SQL Server删除重复行的6个方法

1.如果有ID字段,就是具有唯一性的字段 复制代码 代码如下: delect table where id not in ( select max(id) from table group by col1,col2,col3... ) group by 子句后跟的字段就是你用来判断重复的条件,如只有col1,那么只要col1字段内容相同即表示记录相同. 2. 如果是判断所有字段也可以这样 复制代码 代码如下: select * into #aa from table group by id1,i

sql中查询重复记录与删除重复记录

1.查找全部重复记录  代码如下 复制代码 Select * From 表 Where 重复字段 In (Select 重复字段 From 表 Group By 重复字段 Having Count(*)>1) 2.过滤重复记录(只显示一条)  代码如下 复制代码 Select * From HZT Where ID In (Select Max(ID) From HZT Group By Title) 注:此处显示ID最大一条记录 SQL Server删除重复行是我们最常见的操作之一,下面就为您

sql查询表里重复记录现取重复最后一条记录方法

SQL语句去掉重复记录,获取重复记录  --查询一个表中有效去掉重复的记录,UserID为自增长主键,RoleID为重复字段  代码如下 复制代码 SELECT MIN(UserID) AS UserID, RoleID FROM tmpTable GROUP BY RoleID SELECT RoleID FROM tmpTable GROUP BY RoleID HAVING (COUNT(*) > 1) SELECT DISTINCT * FROM tmpTable sql语句查询 sql

分享SQL Server删除重复行的6个方法_MsSql

1.如果有ID字段,就是具有唯一性的字段 复制代码 代码如下: delect table where id not in ( select max(id) from table group by col1,col2,col3... ) group by 子句后跟的字段就是你用来判断重复的条件,如只有col1,那么只要col1字段内容相同即表示记录相同. 2. 如果是判断所有字段也可以这样 复制代码 代码如下: select * into #aa from table group by id1,i

SQL语句去掉重复记录,获取重复记录_MsSql

SQL语句去掉重复记录,获取重复记录  --查询一个表中有效去掉重复的记录,UserID为自增长主键,RoleID为重复字段 SELECT MIN(UserID) AS UserID, RoleID FROM tmpTable GROUP BY RoleID SELECT RoleID FROM tmpTable GROUP BY RoleID HAVING (COUNT(*) > 1) SELECT DISTINCT * FROM tmpTable sql语句查询 sql server acc

sql server 视图重复列问题

问题描述 sql server 视图重复列问题 表A 列 Series ID Content 表B 列 Series QSeries text 表B中QSeries对应 表A 中Series 创建一个视图,视图中 显示 Series ID Content QSeries text 要求表A中一个Series 只对应 表B中一条数据 解决方案 SELECT A.*,(SELECT top 1 * FROM B WHERE QSeries=Series) AS QSeries FROM A 解决方案

删除sql server中重复的数据

原文:删除sql server中重复的数据 with list_numbers as( select Name, AuthorOrTime, Url, Price, EstimatePrice, Size, Category, ROW_NUMBER() over (order by Name, AuthorOrTime, Url, Price, EstimatePrice, Size, Category) as 'rownumber' from Arts)delete list_numbers