0
表A和B具有N個具有相同名稱(通用列)的列,每個表都有其自己的特殊列 - 表A具有X個附加列,而表B具有Y個附加列。 Column1 * - 是DB範圍的唯一ID,因此表A和B中的行不能合併。我們需要創建一個包含表A和B中所有數據的viewAB。創建視圖合併來自2個表的所有數據
我們嘗試了UNION ALL(但是如果我們沒有命名所有列,它會將來自不同列的數據放到單個列中),FULL OUTER JOIN的確沒有幫助,因爲在視圖中我們可以看到常見列出現兩次(即Column1和Column1_1等)。理想的解決方案是使查詢中我們不需要命名常用列(有很多),但如果我們命名它們就好了。
查看圖片我們希望如何看到我們的數據(http://imgur.com/u2zT98g)。
請找到腳本來設置表如下A和B.
--tableA
CREATE TABLE tableA
(
Common1 varchar2(50),
Common2 varchar2(50),
Common3 varchar2(50),
A1 varchar2(50),
A2 varchar2(50),
A3 varchar2(50),
CONSTRAINT Common1_pk PRIMARY KEY (Common1)
);
INSERT INTO tableA (Common1, Common2, Common3, A1, A2, A3) VALUES ('1C1', '1C2', '1C3', '1A1', '1A2', '1A3');
INSERT INTO tableA (Common1, Common2, Common3, A1, A2, A3) VALUES ('2C1', '2C2', '2C3', '2A1', '2A2', '2A3');
INSERT INTO tableA (Common1, Common2, Common3, A1, A2, A3) VALUES ('3C1', '3C2', '3C3', '3A1', '3A2', '3A3');
--tableB
CREATE TABLE tableB
(
Common1 varchar2(50),
Common2 varchar2(50),
Common3 varchar2(50),
B1 varchar2(50),
B2 varchar2(50),
B3 varchar2(50),
B4 varchar2(50),
CONSTRAINT Common1B_pk PRIMARY KEY (Common1)
);
INSERT INTO tableB (Common1, Common2, Common3, B1, B2, B3, B4) VALUES ('1C1B', '1C2B', '1C3B', '1B1', '1B2', '1B3', '1B4');
INSERT INTO tableB (Common1, Common2, Common3, B1, B2, B3, B4) VALUES ('2C1B', '2C2B', '2C3B', '2B1', '2B2', '2B3', '2B4');
INSERT INTO tableB (Common1, Common2, Common3, B1, B2, B3, B4) VALUES ('3C1B', '3C2B', '3C3B', '3B1', '3B2', '3B3', '3B4');
INSERT INTO tableB (Common1, Common2, Common3, B1, B2, B3, B4) VALUES ('4C1B', '4C2B', '4C3B', '4B1', '4B2', '4B3', '4B4');
--viewAB
--(
-- Common1 varchar2(50),
-- Common2 varchar2(50),
-- Common3 varchar2(50),
-- A1 varchar2(50),
-- A2 varchar2(50),
-- A3 varchar2(50),
-- B1 varchar2(50),
-- B2 varchar2(50),
-- B3 varchar2(50),
-- B4 varchar2(50)
--)
謝謝亞歷克斯,這種方法似乎工作正常。如果我們沒有找到實現這一目標的方法而不提及所有列,我們將以這種方式實施。這對我們來說並不完美,因爲我們在表A和B中有大約100-150列,並且新列可能每週出現一次,所以保持此視圖將需要一些時間。感謝您使用SQL小提琴鏈接 - 我一直在尋找類似的幾周演示工具=) – Zaplatki
@ivang - 您可以使用動態SQL編寫一個PL/SQL塊(或存儲過程)以從數據字典中生成視圖源代碼。但是,如果列更改,那麼引用視圖的代碼也將發生變化,維護視圖可能會成爲模式維護的一部分。 –
謝謝你,我們決定完全按照你的建議去做,似乎這是最好的選擇。 – Zaplatki