【发布时间】:2015-06-18 02:48:25
【问题描述】:
表 A 和 B 有 N 列同名(公共列),每个表都有自己的特殊列 - 表 A 有 X 个附加列,表 B 有 Y 个附加列。 Column1* - 是 DB 范围内的唯一 ID,因此无法合并表 A 和 B 中的行。我们需要创建一个 viewAB 来包含表 A 和 B 中的所有数据。
我们尝试了 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)
--)
【问题讨论】:
标签: sql view oracle11g merge outer-join