如何合并2个完全不同的表?

时间:2012-02-02 13:50:00

标签: sql postgresql merge

  

可能重复:
  Combine two tables that have no common fields

我正在考虑合并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来说相当新鲜)

4 个答案:

答案 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可能对您完成此任务的选项提供了最清晰,最完整的解释。

https://stackoverflow.com/a/1198234/1042438

答案 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;

您可以使用这些命令插入数据,还需要动态创建表吗?