3

2つのテーブルがあり、テーブルbのリビジョン行の上位を超えないようにテーブルaに結合したい

表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です

4

2 に答える 2

0

これがSQLServer2008の実用的なソリューションです。

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

firebirdがそのような次のクエリを許可するかどうかわからない

于 2013-02-05T18:08:00.933 に答える
-1

ちょうどsql:

select a.info01, b.info02
  from a
       inner join b on b.revision_no = (select max(revision_no) 
                                          from b 
                                         where revision_no <= a.revision_no)

これは次を返します:

INFO01 INFO02
====== ======
a      x
b      x
c      x
d      y
e      y
f      z
于 2013-02-05T19:03:29.123 に答える