SELECT A.* FROM PS_A_TBL A LEFTJOIN PS_B_TBL B ON A.KEY1 = B.KEY1 AND A.KEY2 = B.KEY2 AND B.EFFDT = (SELECTMAX(B1.EFFDT) FROM PS_B_TBL B1 WHERE B1.KEY1 = B.KEY1 AND B1.KEY2 = B.KEY2 AND B1.EFFDT <= SYSDATE) --上诉例子就是一个错误的使用方法,如果一定要用外关联,即B表数据少于A表,又要以A表为基表进行查询,可以使用下面的写法: SELECT A.* FROM PS_A_TBL A, PS_B_TBL B WHERE A.KEY1 = B.KEY1(+) AND A.KEY2 = B.KEY2(+) AND (B.EFFDT = (SELECTMAX(B1.EFFDT) FROM PS_B_TBL B1 WHERE B1.KEY1 = B.KEY1 AND B1.KEY2 = B.KEY2 AND B1.EFFDT <= SYSDATE) OR B.EFFDT ISNULL)