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

如何在PostgreSQL中合并相同的表?,sql,postgresql,merge,Sql,Postgresql,Merge,如何在PostgreSQL中合并相同的表强制使用不同的序列号 My scenario:第一列是一个大序列号,它是设置为按顺序递增1自动增长的主键。但它们都是从1,2,3,4开始的。。。。在两个表中 表:数据1 1|A 2|B 3|C 1 | A 2 | B 3 | C 表:数据2 1|D 2|E 3|F 1 | D 2 | E 3 | F 结果应该是: 1|A 2|B 3|C 4|D 5|E 6|F 1 | A 2 | B 3 | C 4 | D 5 | E 6 | F 所需条件:合并后,所有行

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

My scenario:第一列是一个大序列号,它是设置为按顺序递增1自动增长的主键。但它们都是从1,2,3,4开始的。。。。在两个表中

表:数据1

1|A 2|B 3|C 1 | A 2 | B 3 | C 表:数据2

1|D 2|E 3|F 1 | D 2 | E 3 | F 结果应该是:

1|A 2|B 3|C 4|D 5|E 6|F 1 | A 2 | B 3 | C 4 | D 5 | E 6 | F 所需条件:合并后,所有行的序列号应保持唯一

我有两个问题:

  • 有人能帮我弄清楚如何在PostgreSQL 8.4+或9+中创建一个查询来合并两个相同的表吗

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

  • 请引导我

     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 .... 
    
    使用上述结果,您可以创建一个新表:

    CREATE TABLE new_table 
    AS
    SELECT .... 
    
    这样你

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

    您需要使用PostgreSQL 8.4或更高版本来进行测试。
    您只需查看
    tbl1
    的最大值,然后将
    tbl2
    中的ID增加一个比这个大的整数即可

    如果你不在乎以前的ID,去掉重复的值,让ID没有间隙(最初),那么@a_horse'e答案更适合你。

    这样你就可以

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

    您需要使用PostgreSQL 8.4或更高版本来进行测试。
    您只需查看
    tbl1
    的最大值,然后将
    tbl2
    中的ID增加一个比这个大的整数即可


    如果你不在乎以前的ID,去掉重复的值,让ID没有间隙(最初),那么@a_horse'e答案对你来说更好。

    你想要所有的联合,而不是联合(这将消除重复的“代码”值),我也考虑过,但我不完全确定。示例中不清楚,user1227809没有提到任何表示应该保留重复项的内容。您希望在那里全部使用UNION,而不是UNION(这将消除重复的“代码”值)。我也考虑过这一点,但我不完全确定。示例中不清楚,user1227809没有提到任何表示应该保留副本的内容。