我现在假设有张表是t1
建表的时候没有设主键
然后不小心插数据的时候插入了一组重复数据
表如下
id      name
1       a
2       b
3       c
1       a
2       b
3       c
接下来我使用了一个select嵌套语句
select a.id from t1 a where a.id in (select max(b.rowid) from t1 b where a.id = b.id);
注:就算没有设主码但是每一行都有一个不重复的rowid
假设按次序下来rowid分别为
AA
AB
AC
AD
AE
AF
select a.id from t1 a where a.id in (select max(b.rowid) from t1 b where a.id = b.id);这个语句类似等价于
select a.id from t1 a where a.id in (AD,AE,AF)
还是select a.id from t1 a where a.id in (AD,AE,AF,AD,AE,AF)我觉得是第二种,以下是我个看法
首先读t1 a的第一行
t1 a:         t1 b:
id   name     id     name
1    a        1      a
              2      b
              3      c
              1      a
              2      b
              3      c
然后在这种情况下max(b.rowid)
这时也就选出了t1 b的第4行的rowid
因为在第一次是满足a.id(a表的第一行的id)=b.id只有第一行和第四行
然后明显这时max(rowid)是第四行那个
也就是AE
同理t1 a第二行是
id   name     id     name
              1      a
2    b        2      b
              3      c
              1      a
              2      b
              3      c
这时就是AF
同理t1 a第三行是
id   name     id     name
              1      a
              2      b
3    c        3      c
              1      a
              2      b
              3      c
这时就是AG
关键第四行t1 a
id   name     id     name
              1      a
              2      b
              3      c
1    a        1      a
              2      b
              3      c
这时又变成了就是AD!因此就有了
所以我认为是第二种
但是我不知道对不对请高手指点谢谢!