Possible Duplicate:
Combine two tables that have no common fields
我正在考虑将两个没有共同点(没有列,没有id)的表合并为一个表。
是为了报道。我只需要获取表1中的所有列和表2中的所有列,并将它们放入1表中,这样数据就不会改变,只是它们将不在2表中而是在1中。
例子
表1:KeyboardID, Computermodel, factory
表2:MouseID, Speakers, Circuitboard
这两个组合的新表:KeyboardID, Computermodel, factory, MouseID, Speakers, Circuitboard
更新:我要澄清自己:
这是我的情景视图1:StarID, Planet, Sun
然后View2: StarID, Planet, Sun
正如您所看到的,它们的列名完全相同;下面是我期望我的第三个视图的样子:StarID, Planet, Planet2, Sun, Sun2
我不介意第三个视图是这样的:StarID, StarID2, Planet, Planet2, Sun, Sun2
这里有一个问题,它们根本不相关,你可能在想“在StarID
上加入它们”不幸的是,技术上我不能,我需要从View1将StarID
附加到View2的StarID
上,或者将它们放在完全独立的列中(这是因为数据中没有关系)以使事情复杂化,StarID
可能不是唯一的(我不确定是否有视图的唯一性约束(我对postgres还不太熟悉)
最佳答案
您可以使用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”表中的列始终为空,行数为(表1中的行数)+(表2中的行数)。
注意:我不是PostGresQL专家,所以我没有机会测试这个查询。