2011-09-11 42 views
0

我正在尋找一種方法來解決我的SQL問題。火鳥 - 兩個不同的表混合記錄

我在火鳥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日期順序進行排序。我不在乎聯接查詢是否增加了字段的數量,或者日期字段與結果不一樣,或者需要存儲過程。

例如輸出

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 

正如我在stackoverflow.com(即使我跟隨它在過去)我要感謝你的任何答覆我的問題,感謝的第一篇文章你們都爲創造和幫助這個美麗的社區!

問候

弗朗西斯

回答

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

謝謝你的幫助,我發現它看着你的工會語法,當你回答我也^^ –