我正在考虑合并2个表,这些表没有任何共同点(没有列,没有ID)到一个表中。 它用于报告目的。我需要抓住表1中的所有列和表2中的所有列并将它们放入1个表中,这样数据就不会改变,只是不是在2个表中它们将成为1。 / p>
实施例
表1:KeyboardID, Computermodel, factory
表2:MouseID, Speakers, Circuitboard
这两个组合的新表:KeyboardID, Computermodel, factory, MouseID, Speakers, Circuitboard
更新:我要澄清自己:
以下是我的情况View1:StarID, Planet, Sun
然后View2: StarID, Planet, Sun
正如您所看到的,它们具有完全相同的列名称;这就是我期待我的第三个视图的样子:
StarID, Planet, Planet2, Sun, Sun2
我不介意第三个视图看起来像这样:
StarID, StarID2, Planet, Planet2, Sun, Sun2
这是捕获,他们根本没有关联,你可能正在考虑“加入他们StarID
”,不幸的是,我不能从技术角度来看,我需要将来自View1的StarID
附加到{{1}在View2上或者将它们放在完全独立的列中(这是因为数据中没有关系)使事情复杂化,StarID
可能不是唯一的(我不确定是否存在对视图的唯一性约束我是对postgres来说相当新鲜)
答案 0 :(得分:2)
您可以使用full outer join:
FULL OUTER JOIN
首先,执行内连接。然后,为每一行 在T1中,不满足T2中任何行的连接条件,a 连接行在T2列中添加空值。此外,每个 不满足T1中任何行的连接条件的T2行, 添加了T1列中具有空值的连接行。
所以你的查询会是这样的:
select
* -- or explicitly list column names
from
<table1>
full outer join
<table2> on <some join condition>
请注意,连接条件应始终为false。结果将是:
KeyboardID Computermodel factory MouseID Speakers Circuitboard
1 something something3 (null) (null) (null)
2 something2 something4 (null) (null) (null)
(null) (null) (null) 17 something5 something8
(null) (null) (null) 22 something6 something7
请注意,“other”表中的列始终为null,并且行数为(Table1中的行数)+(Table2中的行数)。
注意:我不是PostGresQL专家,因此我没有机会测试此查询。
答案 1 :(得分:0)
看看这个答案。 paxdiablo可能对您完成此任务的选项提供了最清晰,最完整的解释。
答案 2 :(得分:0)
听起来好像你正在试图破解一个双向上市,双方实际上没有任何关系。
您可以使用row_number()合成密钥。我这里没有Postgres,但这样的事情可能有用:
SELECT * FROM
(SELECT KeyboardID, Computermodel, factory, row_number() as num FROM Table1) AS X
FULL OUTER JOIN
(SELECT MouseID, Speakers, Circuitboard, row_number() as num FROM Table2) AS Y
ON x.num = y.num
它任意匹配两个表中的行,没有重复。
通过创建合成“密钥”,您不会获得所有“(null)”值。
答案 3 :(得分:-1)
INSERT INTO table3(KeyboardID,Computermodel,factory) 选择 * FROM table1;
INSERT INTO table3(MouseID,Speakers,Circuitboard) 选择 * FROM table2;
您可以使用这些命令插入数据,还需要动态创建表吗?