我们定义的重复记录并不是两条记录完全相同,而是全部或部分字段内容相同,至于哪些字段相同就定义为重复记录,完全是由我们自己决定。
要最简单最高效地发现重复记录,每一条记录应该有自身的标识,我们通常用主键作为标识,比如我们常说的“记录ID”。
建立一个表,并插入几条记录,如下:
我们定义:sName 与 sClass 相同即为重复记录,可以看出,第四、五、六条记录重复。
那么如何找出这些重复记录呢?
select L.* from foo L inner join foo R on L.id<>R.id and L.sName=R.sName and L.sClass=R.sClass
将表 foo 看作两个表:L 和 R,使用内联接选取重复记录,L.id<>R.id 表示不是同一条记录,L.sName=R.sName and L.sClass=R.sClass 表示定义为重复的条件。
列表结果我们可能会发现有些记录显示了多次,不便于观察,我们可以过滤。
select distinct * from (
select L.* from foo L inner join foo R on L.id<>R.id and L.sName=R.sName and L.sClass=R.sClass) a
将结果看成一个表 a,再用 distinct 过滤。