我需要使用多部分鍵連接兩個表,只選擇第二個表中序號最高的記錄(等同於最新版本)。我遇到了這個問題。如何查找順序中的最高記錄
表A 密鑰1,密鑰2,密鑰3,DATA1,數據2
表B 密鑰1,密鑰2,密鑰3,鍵4,鍵5,KEY_SEQ,數據1,數據2
我需要在連接兩個表keya/keyb/kyc並只選擇最大序列。我所看到的例子似乎適用於單個部分的鍵,但似乎在多部分鍵上難以處理。
只是一個更新,數據庫是DB2i(iSeries)。
我需要使用多部分鍵連接兩個表,只選擇第二個表中序號最高的記錄(等同於最新版本)。我遇到了這個問題。如何查找順序中的最高記錄
表A 密鑰1,密鑰2,密鑰3,DATA1,數據2
表B 密鑰1,密鑰2,密鑰3,鍵4,鍵5,KEY_SEQ,數據1,數據2
我需要在連接兩個表keya/keyb/kyc並只選擇最大序列。我所看到的例子似乎適用於單個部分的鍵,但似乎在多部分鍵上難以處理。
只是一個更新,數據庫是DB2i(iSeries)。
您沒有提及您正在使用哪個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
);
你也許可以用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.
是key1,key2 ..列? –
您正在使用哪些DBMS? Postgres的?甲骨文? –