2014-02-27 21 views
0

我需要使用多部分鍵連接兩個表,只選擇第二個表中序號最高的記錄(等同於最新版本)。我遇到了這個問題。如何查找順序中的最高記錄

表A 密鑰1,密鑰2,密鑰3,DATA1,數據2

表B 密鑰1,密鑰2,密鑰3,鍵4,鍵5,KEY_SEQ,數據1,數據2

我需要在連接兩個表keya/keyb/kyc並只選擇最大序列。我所看到的例子似乎適用於單個部分的鍵,但似乎在多部分鍵上難以處理。

只是一個更新,數據庫是DB2i(iSeries)。

+0

是key1,key2 ..列? –

+0

您正在使用哪些DBMS? Postgres的?甲骨文? –

回答

1

您沒有提及您正在使用哪個SQL數據庫。下面是標準的SQL,並應在大多數數據庫系統運行良好:

select * 
from tablea a join 
    tableb b 
    on a.key1 = b.key1 and 
     a.key2 = b.key2 and 
     a.key3 = b.key3 
where not exists (select 1 
        from tableb b2 
        where b.key1 = b2.key1 and 
         b.key2 = b2.key2 and 
         b.key3 = b2.key3 and 
         b2.key_seq > b.key_seq 
       ); 
0

你也許可以用GROUP做BY子句,但我不能完全肯定。

SELECT * from A join B on A.key1=B.key1 AND A.key2=B.key2 AND A.key3=B.key3 AND B.Key_SEQ = MAX(B.Key_SEQ) GROUP BY B.key1, B.key2, B.key3; 

另一種方法是使用一個左聯接語法:

SELECT A.*, B.* from A join B on A.key1=B.key1 AND A.key2=B.key2 AND A.key3=B.key3 LEFT JOIN B as b2 on B.key1 = b2.key1 AND B.key2 = b2.key2 AND B.key3 = b2.key3 AND B.Key_SEQ < b2.Key_SEQ WHERE b2.Key_SEQ IS NULL; 

該查詢基本上說「給A JOIN B再次加入B,其中第二個B是比第一B大,但二B不存在。「換句話說,沒有B高於第一個B.