sql语句学习

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);这样子就可以解决你想要的语句了。

 

posted @ 2015-05-04 12:18  KOBE-Jason  阅读(97)  评论(0编辑  收藏  举报