>>>>>> 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相同的记录(不包含自身).
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相同的记录(不包含自身).