关键 是这句 WHERE ROWID!=(SELECT MAX(ROWID) FROM EM5_PIPE_PREFAB D
MAX()是取最大的一条数据
也就是去掉一条DRAWING和DSNO相同的记录 剩下的就是重复的了

解决方案 »

  1.   

    >>>>>>
    SELECT * FROM EM5_PIPE_PREFAB  
    WHERE ROWID!=(SELECT MAX(ROWID) FROM EM5_PIPE_PREFAB D --D相当于First,Second  
    WHERE EM5_PIPE_PREFAB.DRAWING=D.DRAWING AND  
    EM5_PIPE_PREFAB.DSNO=D.DSNO);  >>>>>>>
    1.首先,对D的解释就不正确:
     D在这里是第二个表 EM5_PIPE_PREFAB 的别名,是用来和第一个表 EM5_PIPE_PREFAB 区别的.2.它并不是显示所有的DRAWING和DSNO相同且重复的记录 
     因为它会把ROWID最大的(也即是最后一条)去掉.3.过程
        a. 执行: SELECT MAX(ROWID) FROM EM5_PIPE_PREFAB D --D相当于First,Second  
                 WHERE EM5_PIPE_PREFAB.DRAWING=D.DRAWING AND  
                   EM5_PIPE_PREFAB.DSNO=D.DSNO
             查出所有DRAWING和DSNO相同且重复的记录的最大ROWID;
           即使同一条记录也会和它本身的DRAWING和DSNO相同,因此,每一条记录都会有一个与它本身DRAWING和DSNO相同的记录,只不过有的是它自身而已.
         
        b. 执行rowid!=(...)
           将与自身去掉,留下与自身DRAWING和DSNO相同的记录(不包含自身).