一道关于删除数据表中重复数据的笔试题

一张存放学生学号、姓名、课程以及成绩的数据表,设计将同一学号的记录只保留一条


结果如下图所示





 我的答案:

CREATE TABLE IF NOT EXISTS `student` (
`stu_no` int unsigned NOT NULL DEFAULT 0,
`stu_name` varchar(20) not null DEFAULT '',
`scheme` varchar(20) not null DEFAULT '',
`grade` int unsigned not null DEFAULT 0
)ENGINE=InnoDB DEFAULT CHARSET=utf8 ;

INSERT INTO `student` VALUES (1001, '张三', '数学', 90);
INSERT INTO `student` VALUES (1002, '李四', '英语', 80);
INSERT INTO `student` VALUES (1003, '王五', '语文', 100);
INSERT INTO `student` VALUES (1001, '张三', '数学', 90);
INSERT INTO `student` VALUES (1002, '李四', '英语', 80);
INSERT INTO `student` VALUES (1003, '王五', '语文', 100);
INSERT INTO `student` VALUES (1001, '张三', '数学', 90);
INSERT INTO `student` VALUES (1002, '李四', '英语', 80);
INSERT INTO `student` VALUES (1003, '王五', '语文', 100);

CREATE TABLE `student_2` LIKE `student`;

ALTER TABLE `student_2` ADD CONSTRAINT uk_stu_no UNIQUE(`stu_no`);

INSERT IGNORE INTO `student_2` SELECT * FROM `student`;

DROP TABLE `student`;

ALTER TABLE `student_2` RENAME TO `student`; 

或者

CREATE TABLE IF NOT EXISTS `student` (
`stu_no` int unsigned NOT NULL DEFAULT 0,
`stu_name` varchar(20) not null DEFAULT '',
`scheme` varchar(20) not null DEFAULT '',
`grade` int unsigned not null DEFAULT 0
)ENGINE=InnoDB DEFAULT CHARSET=utf8 ;

INSERT INTO `student` VALUES (1001, '张三', '数学', 90);
INSERT INTO `student` VALUES (1002, '李四', '英语', 80);
INSERT INTO `student` VALUES (1003, '王五', '语文', 100);
INSERT INTO `student` VALUES (1001, '张三', '数学', 90);
INSERT INTO `student` VALUES (1002, '李四', '英语', 80);
INSERT INTO `student` VALUES (1003, '王五', '语文', 100);
INSERT INTO `student` VALUES (1001, '张三', '数学', 90);
INSERT INTO `student` VALUES (1002, '李四', '英语', 80);
INSERT INTO `student` VALUES (1003, '王五', '语文', 100);

CREATE TABLE `student_2` LIKE `student`;

#ALTER TABLE `student_2` ADD CONSTRAINT uk_stu_no UNIQUE(`stu_no`);

INSERT IGNORE INTO `student_2` SELECT * FROM `student` GROUP BY `stu_no`;

DROP TABLE `student`;

ALTER TABLE `student_2` RENAME TO `student`; 


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值