16.学生表 如下:删除除了自动编号不同,其他都相同的学生冗余信息
自动编号 学号 姓名 课程编号 课程名称 分数
1 2005001 张三 0001 数学 69
2 2005002 李四 0001 数学 89
3 2005001 张三 0001 数学 69
自动编号 学号 姓名 课程编号 课程名称 分数
1 2005001 张三 0001 数学 69
2 2005002 李四 0001 数学 89
3 2005001 张三 0001 数学 69
from 学生表
group by 学号
having count(*)>2
------------------------不过这样得出的结果只是查出了学号有重复的.不一定能满足你的要求!
from 学生表
where 自动编号 in (select min(自动编号)
from 学生表
group by 学号, 姓名, 课程编号, 课程名称, 分数)
insert into 学生表 values(1 , '2005001', '张三', '0001' , '数学', 69)
insert into 学生表 values(2 , '2005002', '李四', '0001' , '数学' , 89)
insert into 学生表 values(3 , '2005001', '张三', '0001', '数学' , 69)
select *
from 学生表
where 自动编号 in (select min(自动编号)
from 学生表
group by 学号, 姓名, 课程编号, 课程名称, 分数)
结果
自动编号 学号 姓名 课程编号 课程名称 分数
----------- -------------------- -------------------- -------------------- -------------------- -----------
1 2005001 张三 0001 数学 69
2 2005002 李四 0001 数学 89(所影响的行数为 2 行)
(自动编号 int, 学号 char(10), 姓名 char(10), 课程编号 char(10), 课程名称 char(10), 分数 int)
insert a
select 1 ,'2005001' ,'张三' ,'0001' ,'数学' ,69
union all
select 2 ,'2005002' ,'李四' ,'0001' ,'数学' ,89
union all
select 3 ,'2005001' ,'张三' ,'0001' ,'数学' ,69select min(自动编号)自动编号,学号,姓名,课程编号,课程名称,分数 from a
group by 学号,姓名,课程编号,课程名称,分数 自动编号 学号 姓名 课程编号 课程名称 分数
----------- ---------- ---------- ---------- ---------- -----------
1 2005001 张三 0001 数学 69
2 2005002 李四 0001 数学 89(所影响的行数为 2 行)
借花献佛,借各位大侠的代码,加点补充!!!
delete from a where 自动编号 not in (select min(自动编号)自动编号 from a group by 学号,姓名,课程编号,课程名称,分数) (所影响的行数为 1 行)
delete from 学生表 where 自动编号 in(
select min(自动编号) from 学生表 group by 学号,课程编号 ,分数 having count(*)>1)我这条语句会把所有相同信息删除,用 huailairen(流浪猫) 的方法倒入一个临时表可得到你的结果
insert into 学生表 values(1 , '2005001', '张三', '0001' , '数学', 69)
insert into 学生表 values(2 , '2005002', '李四', '0001' , '数学' , 89)
insert into 学生表 values(3 , '2005001', '张三', '0001', '数学' , 69)
select s.学号,s.姓名,s.课程编号,s.课程名称,s.分数 from 学生表 s group by s.学号,s.姓名,s.课程编号,s.课程名称,s.分数 having count(1)>1
where not exists(select 1 from tbl where 学号=a.学号 and 姓名=b.姓名
and 课程编号=a.课程编号 and 课程名称=a.课程名称 and 分数=a.分数 and 自动编号<a.自动编号)