SQL:粘贴两个独立的表

时间:2014-11-21 14:05:52

标签: sql postgresql join union

我有两张独立的表格:

Emp: id, name, bossid
Data: d_id, d1, d2, d3, d4, d5

我想在 postgreSQL

中创建一个新表
Goal: id, name, bossid, d_id, d1, d2, d3, d4, d5

哪种查询适合?

EDIT 结果表

id   |   name   | bossid   | d_id   |   d1   |   d2    |   d3 ...   
-------------------------------------------------------------------
     |          |          |        |        |         |

EDIT2 Goal表将包含Emp中的所有记录以及Data中相同数量的记录。所以它就像LEFT JOIN但我没有ON条件,因为表格没有关系。

2 个答案:

答案 0 :(得分:1)

您可以使用交叉联接,但这可能会产生不良后果,具体取决于您的需求。

CREATE TABLE Goal AS
    SELECT *
    FROM Emp CROSS JOIN Data

答案 1 :(得分:0)

CREATE TABLE result AS
SELECT e.*, d.*
FROM  emp e
LEFT  JOIN (SELECT * FROM data LIMIT 1) d ON TRUE

这正是你所要求的 由于缺乏定义,我采用了最便宜的解决方案,从Data中选择了一行中的任意一行,以附加到Emp的每一行。

结果表包含来自Emp的所有行,无论Data中的行数是多少,甚至可以为空。

在辅助表中附加一个DISTINCT任意行:

CREATE TABLE result AS
SELECT id, name, bossid, d_id, d1, d2, d3, d4, d5
FROM        (SELECT *, row_number() OVER () AS rn FROM emp) e
LEFT   JOIN (SELECT *, row_number() OVER () AS rn FROM data) d USING (rn)

与上面相同,但附加了Data的任意不同行。同样,适用于Data中的0-n行。

Data行数的效果:

  • Data中的0行:结果中表示的所有行; Data列中的所有行都为NULL。
  • 少于Emp:结果中表示的所有行;来自Emp的多余行在Data的列中为空。
  • 行数相等:结果中表示的所有行;没有额外的NULL值。
  • 超过Emp:来自Data的任意多余行丢失;没有额外的NULL值。