我需要使用multipart键连接两个表,只选择序列号最高的第二个表中的记录(等同于最新版本)。我遇到了这个问题。
表A. Key1,Key2,Key3,data1,Data2
表B. Key1,Key2,Key3,Key4,Key5,Key_SEQ,Data1,Data2
我需要在keya / keyb / kyc上加入两个表,并只选择最大序列。我看到的例子似乎适用于单个部分键,但在多部分键上看起来很笨拙。
只是更新,数据库是DB2i(iSeries)。
答案 0 :(得分: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
);
答案 1 :(得分: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加入B加入B,其中第二个B大于第一个B,但第二个B不存在”。换句话说,没有B高于第一个B.