如何删除Oracle中具有最大列值的行

时间:2012-12-28 04:05:42

标签: sql oracle

我的源控制数据库有两个表 - PRJPRJHIST,两者都有相同的列和约束。

例如。 PRJPRJHIST包含以下行

PRJ TABLE    

PRJ_NAME PRJ_TYPE PRJ_VERSION PRJ_AUTHOR PRJ_LANG  
PRJ001     SCRIPT   3           MARK       PERL  
PRJ002     SCRIPT   2           JACK       KSH  
PRJ003     BINARY   4           JADE       C++  


PRJHIST TABLE  

PRJ_NAME PRJ_TYPE PRJ_VERSION PRJ_AUTHOR PRJ_LANG
PRJ001     SCRIPT   1           MARK       PERL  
PRJ001     SCRIPT   2           MARK       PERL  
PRJ001     SCRIPT   3           MARK       PERL  
PRJ002     SCRIPT   1           JACK       KSH  
PRJ002     SCRIPT   2           JACK       KSH  
PRJ003     BINARY   1           JADE       C++  
PRJ003     BINARY   2           JADE       C++  
PRJ003     BINARY   3           JADE       C++  
PRJ003     BINARY   4           JADE       C++  

PRJ表始终包含PRJHIST

中最大版本的行

如何删除max(PRJ_VERSION)表中PRJHIST的所有行?

即我需要从PRJHIST

中删除以下行
PRJ001     SCRIPT   3           MARK       PERL  
PRJ002     SCRIPT   2           JACK       KSH  
PRJ003     BINARY   4           JADE       C++  

1 个答案:

答案 0 :(得分:1)

DELETE FROM PRJHIST a
 WHERE EXISTS (SELECT 'X' 
                 FROM PRJ b
                WHERE a.PRJ_NAME = b.PRJ_NAME
                  AND a.PRJ_VERSION = b.PRJ_VERSION);