2011-09-11 11 views
0

私のSQLの問題を解決する方法を探しています。Firebird - 2つの異なるテーブルのレコードを混ぜる

私はこれらのような火の鳥2.5(T1およびT2)で2つのテーブルがあります。

T1 (
T1_ID INTEGER, 
T1_DAY DATE, 
T1_NAME VARCHAR(200) 
) 

T2 (
T2_ID INTEGER, 
T2_DAY DATE, 
T2_NAME VARCHAR(200) 
) 

を、私はこれらのテーブルのレコードをミックスしASC日付順に並べ替えるクエリを必要としています。ジョインクエリがフィールドの数を増やしたり、日付フィールドが結果と同じではない、またはストアドプロシージャが必要な場合は気にしません。

出力例stackoverflow.com上の私の最初のポストとして

T1_ID T1_DAY T1_NAME T2_ID T2_DAY T2_NAME 
--------------------------------------------------- 
    1 01/02/2011 BOB  NULL NULL  NULL 
    2 27/02/2011 SAM  NULL NULL  NULL 
NULL NULL  NULL  8 15/03/2011 PETER 
NULL NULL  NULL  10 21/03/2011 JOHN 
    6 17/04/2011 AMY  NULL NULL  NULL 

または(より良い出力)

ID  DAY  NAME 
------------------------- 
    1 01/02/2011 BOB 
    2 27/02/2011 SAM 
    8 15/03/2011 PETER 
    10 21/03/2011 JOHN 
    6 17/04/2011 AMY 

(私は過去にそれを踏襲していても)私は私の質問への回答のためにあなたに感謝したいと感謝あなたはすべてこの美しいコミュニティを創造し、助けてくれる!

敬具

フランチェスコ

答えて

1

あなたはUNIONオペレータたい:あなたは、個々の選択はあなたが好きな追加機能を持たせることができ

SELECT 
    T1.T1_ID ID, 
    T1.T1_DAY DAY, 
    T1.T1_NAME NAME 
FROM 
    T1 

UNION 
SELECT 
    T2.T2_ID, 
    T2.T2_DAY 
    T2.T2_NAME 
FROM 
    T2 
; 

を。唯一の制約は、両方の選択リストの列がすべて同じ順序であり、同じ型(「共用体」)であることです。結果の行には、最初の選択と同様に列ヘッダーがあります。

編集:ユニオンの順序を制御するには、サブ選択でユニオンと外側のクエリの順序を行う必要があります。

SELECT u.ID, u.DAY, u.NAME 
FROM (
    SELECT T1.T1_ID ID, T1.T1_DAY DAY, T1.T1_NAME NAME 
    FROM T1 

    UNION 
    SELECT T2.T2_ID, T2.T2_DAY T2.T2_NAME 
    FROM T2 
) u 
ORDER BY u.NAME; 
+0

varcharフィールドの長さが異なる場合はどうなりますか? フィールドの数とタイプが同じではないが、日付別にレコードをソートする必要がある場合はどうすればよいですか? ありがとうございました! –

+0

あなたのソリューションは正常に動作しているようですが、「データ順」を正しく使用することができませんでした。ここで私は組合で働くために "注文"陳述書を置くことができますか? (t1_dataとt2_dataを混合してソートする) –

+0

あなたに助けてくれてありがとう、私もあなたにも私に答えている間にユニオン構文を見ていました^^ –

関連する問題