1.构建表和数据
CREATE TABLE `teacher` (
`ID` bigint(20) NOT NULL COMMENT 'ID',
`REGNAME` char(200) DEFAULT NULL COMMENT '师教编号',
`NAME` char(20) NOT NULL COMMENT '教师名称',
`TYPE` int(1) DEFAULT '0' COMMENT '师教类型(0:内聘,1:外聘)',
PRIMARY KEY (`ID`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
INSERT INTO `teacher` VALUES ('10001', 'allen', 'allen', '0');
INSERT INTO `teacher` VALUES ('10002', 'ruby', 'ruby', '0');
INSERT INTO `teacher` VALUES ('10003', 'sharon', 'sharon', '1');
INSERT INTO `teacher` VALUES ('10004', 'alpha', 'alpha', '0');
INSERT INTO `teacher` VALUES ('10005', 'alpha', 'alpha', '0');
INSERT INTO `teacher` VALUES ('10006', 'alpha', 'alpha', '0');
2.数据库记录
mysql> select * from teacher;
+-------+---------+--------+------+
| ID | REGNAME | NAME | TYPE |
+-------+---------+--------+------+
| 10001 | allen | allen | 0 |
| 10002 | ruby | ruby | 0 |
| 10003 | sharon | sharon | 1 |
| 10004 | alpha | alpha | 0 |
| 10005 | alpha | alpha | 0 |
| 10006 | alpha | alpha | 0 |
+-------+---------+--------+------+
6 rows in set
3.需要获取的记录
+-------+---------+--------+------+
| ID | REGNAME | NAME | TYPE |
+-------+---------+--------+------+
| 10001 | allen | allen | 0 |
| 10002 | ruby | ruby | 0 |
| 10003 | sharon | sharon | 1 |
| 10004 | alpha | alpha | 0 |
| 10005 | alpha | alpha | 0 |
+-------+---------+--------+------+
查询语句:mysql> select * from teacher t
where 2>(select count(*) from teacher where REGNAME=t.REGNAME and ID<t.ID);
+-------+---------+--------+------+
| ID | REGNAME | NAME | TYPE |
+-------+---------+--------+------+
| 10001 | allen | allen | 0 |
| 10002 | ruby | ruby | 0 |
| 10003 | sharon | sharon | 1 |
| 10004 | alpha | alpha | 0 |
| 10005 | alpha | alpha | 0 |
+-------+---------+--------+------+
5 rows in set
-----------------------------------------------------
解释: 说白了 就是
每条语句都有一个count(*),10001,10002,10003,10004的count(*)都是0,
10005的count(*)是1,10006的count(*)就是2,取大于2的数据,就排除了id是1006的记录。
当检索到id是10006的时候,REGNAME=t.REGNAME 的记录有3条,
而符合这个条件的是ID<t.ID,分别是 10004<10006,10005<10006,
10006不小于1006,
所以当id是1006的时候,count(*)是2。
而表中REGNAME唯一的记录的count(*)是0,因为,举个例子来说,当检索id是10001的记录时, 不存在1001<1001的结果,所以count(*)是0
--------------------
还可以访问 获得更多信息
http://blog.csdn.net/acmain_chm/article/details/4126306
分享到:
相关推荐
在MySQL数据库中,存储过程是一种预编译的SQL语句集合,可以用于执行复杂的数据库操作,如删除重复记录。在给定的存储过程`DelDuplicateRecord`中,它旨在删除具有相同标题的记录,但仅保留每个标题下最早的一条记录...
以下是一个简单的示例代码片段,展示了如何在 Delphi 中删除重复记录: ```delphi uses ADODB; procedure RemoveDuplicates(ADataset: TDataSet); var CurrentRecord, LastRecord: Variant; begin // 先移动到...
在MySQL中,`DISTINCT`和`GROUP BY`都是用于处理重复记录的查询语句,但它们在不同的场景下有着不同的应用和效果。 首先,**单表查询中的DISTINCT**,用于从单个表中去除重复的记录。当你只想获取某个字段的不重复...
今天,我们将深入探讨如何使用`DISTINCT`关键字在MySQL中查询多条不重复记录值,这不仅是一种实用技能,也是提升数据处理效率的关键所在。 ### `DISTINCT`关键字详解 `DISTINCT`关键字在SQL查询中扮演着一个至关...
除了上述问题,MySQL还提供了其他方法来处理不重复记录,如`GROUP BY`结合`HAVING`子句,但这通常用于计算聚合函数,如计数或求和。在本场景中,结合`JOIN`操作可能是更为直接和有效的解决方案。 在实际数据库管理...
在其他数据库系统如SQL Server中,可能会使用不同的方法来删除重复记录,例如使用`ROW_NUMBER()`函数,但基本思路是类似的,都是先找出重复项,然后依据某些标准保留特定的记录,最后删除其他重复的记录。...
- 在MyISAM表中,删除最大编号的记录后,该编号不会被重用。这意味着自增序列不会回溯,而是继续从当前最大值加1开始。 - 使用`TRUNCATE TABLE`命令会清空整个表,并将自增字段重置为1,适合用于彻底清除表数据而...
在这个查询中,我们使用了一个子查询 `t2` 来获取每个重复组的最小ID,然后在外部的 `DELETE` 语句中,我们删除了所有ID大于这个最小ID的记录。这样就保留了每个组中ID最小的记录。 然而,如果重复数据的行数超过3...
### 方法一:使用子查询删除重复记录 这是在描述中提到的一种方法,通过子查询找到每个`sid`的最小`id`,然后删除其他所有`id`不等于最小`id`的记录。 ```sql DELETE FROM event AS e WHERE id != (SELECT MIN(id) ...
本篇将详细介绍如何在MySQL中查找并删除重复记录。 首先,我们可以通过创建一个示例表`people`来演示这个过程。假设我们有一个包含`id`(主键)、`name`和`email`字段的表,如下所示: ```sql CREATE TABLE people...
在Delphi编程环境中,处理数据库记录时,有时我们需要找出数据表中的重复记录。这可能是为了数据清理、数据验证或优化数据库结构。本教程将详细讲解如何在Delphi中使用SQL查询和程序逻辑来查找并处理数据库中的重复...
SQL语句去掉重复记录,获取重复记录 –查询一个表中有效去掉重复的记录,UserID为自增长主键,RoleID为重复字段 SELECT MIN(UserID) AS UserID, RoleID FROM tmpTable GROUP BY RoleID SELECT RoleID ...
对于部分关键字段重复的情况,通常我们需要保留重复记录中的第一条。这里以Name和Address为例,我们希望基于这两个字段得到唯一的结果集。以下是处理方法: 1. **MySQL** - 在`tableName`上新增一个自增的`autoID`...
例如,假设表`t`有`id`(主键)、`name`和`address`字段,我们希望去除`name`和`address`字段组合重复的记录,保留每组重复记录中的任意一条。在这种情况下,可以使用相关子查询来实现: ```sql SELECT * FROM t t1...
错误代码1217表示删除或修改主表记录失败,因为存在依赖的子表记录。 错误代码1226表示当前用户使用的资源已超过所允许的资源,请重启数据库或重启服务器。这通常是由于资源限制导致,需要增加资源配额。 错误代码...
2. **数据插入**:使用`INSERT INTO`语句向表中添加新记录,例如`INSERT INTO table_name (column1, column2) VALUES (value1, value2);`。 3. **数据更新**:`UPDATE`语句用于修改现有记录,例如`UPDATE table_...
在MySQL数据库中,创建学生表是一项基础操作,用于存储与学生相关的各种信息。在这个场景下,我们使用SQL(Structured Query Language)语句来构建表结构。以下是对创建学生表涉及的关键知识点的详细解释: 1. **...
UNION操作在合并结果集时会去除重复记录并进行排序,而UNION ALL则不会,因此使用UNION ALL可以提高性能,前提是合并的结果集没有重复数据且不需要排序。 MySQL中常用的索引类型包括普通索引、唯一索引、主键索引和...