我有2个表,我想将表b的最高修订版本行加入表a

表一:

REVISION_NO     INFO1
1               a
2               b
3               c
4               d
5               e
6               f

表b:
REVISION_NO     INFO2
1               x
4               y
6               z

我想要 :
a               x
b               x
c               x
d               y
e               y
f               z

一些加盟专家知道如何做到这一点?如果重要,数据库为Firebird

最佳答案

这是SQL Server 2008的有效解决方案。

BEGIN
DECLARE @a TABLE(REVISION_NO INT, INFO1 CHAR(1))
DECLARE @b TABLE(REVISION_NO INT, INFO2 CHAR(1))
INSERT INTO @a VALUES
(1, 'a'),(2,'b'),(3,'c'),(4,'d'),(5,'e'),(6,'e')
INSERT INTO @b VALUES
(1,'x'),(4,'y'),(6,'z')
--
SELECT a.INFO1
, ISNULL(b.INFO2, (
    SELECT INFO2 FROM @b WHERE REVISION_NO = (
        SELECT MAX(REVISION_NO)
        FROM @b
        WHERE REVISION_NO < a.REVISION_NO
))) [INFO2]
FROM @a a
LEFT JOIN @b b
    ON b.REVISION_NO = a.REVISION_NO
END

不知道火鸟是否会允许此类下一次查询

10-08 05:30