2016-01-22 22 views
0

我需要3加入三個表TM, TA, MS - TA對TM中每一行有多個記錄我需要在TM的基礎上得到一個永久行的last row from TA,最高的爲最新的記錄得到最頂級的一個表加入結果

這是我的查詢:

select * from TABLE1 MS RIGHT OUTER JOIN 
TABLE2 TM ON MS.CID = TM.CID 
LEFT OUTER JOIN TABLE3 TA ON TM.EID=TA.EID; 
+0

混合右加入與左加入...你期望誰理解這個查詢?大多數人都有足夠的問題單獨使用LEFT JOIN ...(如果您想編寫可以維護的代碼,只能使用LEFT JOIN!) – jarlh

回答

1

一種方法是使用row_number()

select * 
from TABLE1 MS JOIN 
    TABLE2 TM 
    ON MS.CID = TM.CID JOIN 
    (SELECT TA.*, ROW_NUMBER() OVER (PARTITION BY EID ORDER BY STATUS DESC) as seqnum 
     FROM TABLE3 TA 
    ) TA 
    ON TM.EID = TA.EID AND seqnum = 1; 

你的問題SA沒什麼關於不匹配的記錄,所以我刪除了外部連接。這些只應在您打算保留無與倫比的記錄時使用(並且爲此目的,大多數人更喜歡LEFT JOINRIGHT JOIN)。