sql消除重复行
㈠ 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.科目='语文'
是这个意思不??
这样就查出每个人的一条记录,
只是语文成绩,
你如果需要其他科目
可以把科目后改成
数学或者外语,不过
你表达的真是不清楚,
标题写的是删除重复行,可是
你的数据
没有重复数据,这样的外键存在是很正常的,为什么非要显示一条,,搞不懂,