rowid和发现重复?

时间:2016-01-26 00:47:28

标签: mysql sql oracle

表有重复:

JOB                  JOBID                EMPID              
-------------------- -------------------- --------------------
Manager              10                   1                   
Manager              10                   1                   
Operations           20                   2                   
Engineer             30                   3                   
Manager              10                   1                   
Operations           30                   2           

查询

select * from  dept
where rowid not in (select min(rowid) from dept group by job);

将结果表示为:

JOB                  JOBID                EMPID              
-------------------- -------------------- --------------------
Manager              10                   1                   
Operations           30                   2                   
Manager              10                   1            

任何人都可以解释它如何处理以检索结果? 我知道每一行都有唯一的rowid。但首先,子查询执行以获得作为第一行的最小rowid,然后比较(不是)与检索所有rowid的外部的那个。有些人可以更清楚地解释它是如何比较和检索3行的结果?试图理解简单的逻辑。 ?

1 个答案:

答案 0 :(得分:0)

使用您发布的数据,子查询将为每个作业返回一行 - Manager,Operations和Engineer。然后它获取不在该子查询中的所有记录。

它不会返回工程师,因为唯一的rowid必须是最小的。 Manager有三条记录。一个有最低的rowid,所以其他两个返回。它与操作类似。

the documentation中很好地解释了rowid。