表有重复:
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行的结果?试图理解简单的逻辑。 ?
答案 0 :(得分:0)
使用您发布的数据,子查询将为每个作业返回一行 - Manager,Operations和Engineer。然后它获取不在该子查询中的所有记录。
它不会返回工程师,因为唯一的rowid必须是最小的。 Manager有三条记录。一个有最低的rowid,所以其他两个返回。它与操作类似。
在the documentation中很好地解释了rowid。