您的位置:首页 > 数据库

sql语句学习

2015-05-04 12:18 155 查看
1.首先创建表 create table test1 (id int, student_id int,name varchar(20),class_no int,class_name varchar(20),fenshu int);

2.添加数据:INSERT INTO `test1`(`id`, `student_id`, `name`, `class_no`, `class_name`, `fenshu`) VALUES

(1,2005001 ,'张三', 1, '语文', 81),

(2,2005002 ,'李四', 1, '语文', 81),

(3,2005001 ,'张三', 1, '语文', 81),

(4,2005001 ,'张三', 1, '语文', 81);

添加表,表信息如下:

自动编号 学号 姓名 课程编号 课程名称 分数
1 2005001 张三 1 语文 81
2 2005002 李四 1 语文 81
3 2005001 张三 1 语文 81
4 2005001 张三 1 语文 81

问题:删除除自动编号不同,其他都相同的学生冗余信息

首先我们分析一下问题,只有自动编号不同的,删除其他都相同的数据。

delete from test1 where id not in (select id from test1 group by `student_id`, `name`, `class_no`, `class_name`, `fenshu` ); 我想好多人会想到这个办法,可是我们会发现运行不起来总是报错:#1093 - You can't specify target table 'test1' for update in FROM clause

我们就发现有问题,那我们这么修改呢?

修改:delete from test1 where id not in (select bid from (select id as bid from test1 group by `student_id`, `name`, `class_no`, `class_name`, `fenshu` ) as a);这样子就可以解决你想要的语句了。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: