2016-01-22 44 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)。