如何在PostgreSQL中合并相同的表?

时间:2012-02-23 08:28:53

标签: sql postgresql merge

如何合并 PostgreSQL中的相同表格强制使用不同的序列号。

我的方案:第一列是一个bigserial数字,主键设置为按序列中的增量1自动增长。但他们都以1,2,3,4 ......开头。

表:Data1

1|A
2|B
3|C

表:Data2

1|D
2|E
3|F

结果应该是:

1|A
2|B
3|C
4|D
5|E
6|F

必需条件:合并后所有行的序列号应保持唯一。

我有两个问题:

  1. 有人可以帮我弄清楚如何创建一个查询来合并PostgreSQL 8.4+或9 +中的两个相同的表吗?

  2. 在PostgreSQL命令或PgAdmin或某些实用程序中是否有办法直接合并这两个表?

  3. 请指导我。

2 个答案:

答案 0 :(得分:1)

 SELECT *
 FROM (    
    SELECT row_number() over () as rn, 
          code
    FROM ( 
      SELECT code 
      FROM table_1
      UNION 
      SELECT code
      FROM table_2
    ) as t1
 ) as t2
 ORDER BY rn

使用上述结果,您可以创建一个新表:

CREATE TABLE new_table 
AS
SELECT .... 

答案 1 :(得分:0)

这样你

  • 保留所有行(包括重复项)
  • 保持第一个表
  • 中值的ID不变
  • 保留可与第二张表匹配的ID

WITH x AS (
    SELECT max(id) AS x
    FROM tbl1
    ) 
SELECT id, val
FROM   tbl1
UNION  ALL
SELECT x + id, val
FROM   tbl2, x
ORDER  BY id;

CTE需要PostgreSQL 8.4或更高版本 您可以查看tbl1的最大值,并将tbl2中的ID增加一个大于该值的精确数字。

如果你不关心以前的ID,去除重复的值并且没有间隙的ID(最初),那么@ a_horse'e答案对你来说更好。