将唯一行插入不存在的表中

时间:2017-09-04 19:10:03

标签: sql postgresql insert

我正在使用postgres 8.4。 我将几个表合并为一个。表格内和表格之间都有重复。新表将具有唯一约束。我已经将第一个表插入到新的大表中而没有遇到任何问题,但是当我尝试添加第二个表时出现错误。我试过了:

INSERT INTO big_table(id, col1, col2)
    SELECT DISTINCT ON (id)
        id,
        col1,
        col2,
        FROM table2
        WHERE NOT EXISTS(
            SELECT id, col1, col2
            FROM big_table
            WHERE(big_table.id = table2.id))

我收到以下错误:

  

对表“big_table”LINE的FROM子句条目的无效引用   13:... big_table WHERE(table2.id = big_table.id))

     

提示:表格“big_tweets”有一个条目,但不可以   从查询的这一部分引用。

我认为这可能与big_table更改这一事实有关,但我不确定如何排除表中已存在的行。

1 个答案:

答案 0 :(得分:0)

与您的问题无关。但是,您可以在创建大表之前UNION所有表以删除重复项。

 CREATE big_table as 
       SELECT id, col1, col2 FROM Table1
       UNION
       SELECT id, col1, col2 FROM Table2
       ....
       UNION
       SELECT id, col1, col2 FROM TableN

您还可以使用CTE解决自我参考问题

WITH cte as (
    SELECT DISTINCT ON (id)
        id,
        col1,
        col2,
        FROM table2
        WHERE NOT EXISTS(
            SELECT id, col1, col2
            FROM big_table
            WHERE(big_table.id = table2.id))
)
INSERT INTO big_table
SELECT * 
FROM cte