首页 > 数据库技术 > 详细

sql语句学习

时间:2015-05-04 13:33:19      阅读:335      评论:0      收藏:0      [点我收藏+]

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

 

sql语句学习

原文:http://www.cnblogs.com/kobigood/p/4475864.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!