我正在使用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更改这一事实有关,但我不确定如何排除表中已存在的行。
答案 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