2011-09-29 22 views
1

我想創建重複的行作爲輸出:首先我想有行,然後在同一行再次接合其他表,如下所示:的Oracle SQL創建重複的行與參加

table A with fieldA (and lots of others) 

table B with fieldB (and lots of others) 

和輸出:

fieldA1   (and all the fileds from tableA)  
fieldA1 fieldB1 (and all the fields from tableA and tableB joined) 
filedA1 fieldB2 
fieldA2 
fieldA2 fieldB8 
filedA2 fieldB9 
. . . 

我想使用聯盟,但後來我不得不重複非常複雜的選擇表A中獲得表A和tableB的的行(表A是其他表的工會,我只是簡化它的問題)。有沒有更清潔的解決方案?我知道這是一個不尋常的問題,所以我會認真考慮任何思想或想法。

非常感謝您提前!

回答

3

修改Benoit的答案,使用公用表表達式:

WITH A as (
your select for "A" 
) 
SELECT A.fieldA, B.fieldB, A.*, B.* 
    FROM A LEFT JOIN B ON 1 = 0 
UNION ALL 
SELECT A.fieldA, B.fieldB, A.*, B.* 
    FROM A JOIN B ON (join condition) 
+0

非常感謝! :) – user2424380

1

用途:

SELECT A.*, B.* 
    FROM A LEFT JOIN B ON 1 = 0 
UNION ALL 
SELECT A.*, B.* 
    FROM A INNER JOIN B ON (join condition) 
+0

謝謝你,這是一個很好的解決方案,只是我想避免使用SELECT A. *兩次,因爲在我的真實表達中,這是一個非常漫長而複雜的連接。我真正的問題是,有什麼辦法可以避免它.Thx無論如何。 – user2424380

+0

@ user405067:使用WITH子句進行分解。 – Benoit