SELECT COL1, COL2, COL3 FROM TABLE1, TABLE2, TABLE3, TABLE4 WHERE TABLE1.KEY1 = TABLE2.KEY1 AND TABLE2.KEY = TABLE3.KEY AND TABLE2.FILTER = 'Y' AND TABLE3.FILTER = 'Y' AND TABLE2.KEY = TABLE3.KEY AND TABLE3.KEY = TABLE4.KEY
我有一个类似的查询,我需要进行修改,在表3中有一个date列,我需要选择日最高值行来加入。可以说表号3中有4行对联接感到满意,我需要从这4个表中选择最高日期的行以进行联接,然后显示结果。
希望问题很明确。数据库Oracle 10g
尝试类似此查询的操作。
SELECT COL1, COL2, COL3, T33.* FROM TABLE1 JOIN TABLE2 ON TABLE1.KEY1 = TABLE2.KEY1 JOIN TABLE4 ON TABLE2.KEY = TABLE4.KEY JOIN ( SELECT MAX(T.Day) as DT, T.KEY FROM TABLE3 T WHERE T.FILTER = 'Y' GROUP BY T.KEY ) T3 on TABLE4.KEY = T3.KEY JOIN TABLE3 T33 ON T3.KEY = T33.KEY AND T3.DT = T33.Day WHERE TABLE2.FILTER = 'Y'
主要思想是,不要 加入TABLE3您的行列:
TABLE3
SELECT MAX(T.Day) as DT, T.KEY FROM TABLE3 T WHERE T.FILTER = 'Y' GROUP BY T.KEY
给该表/记录集一个名称,然后加入该表/记录集。
然后,你可以再次加入到原来的TABLE3(见T33) 拉所有其他需要的列从TABLE3它们 不存在T3。
T33
T3
我认为,您可以计算出其他细节。