如何将连接结果保存到另一个表?

Ado*_*obe 3 postgresql join

在 PostgreSQL 中,我可以使用SELECT INTOSELECT将结果保存到另一个表:

SELECT id INTO new_record_ids FROM new_table
  EXCEPT
    SELECT id FROM old_table
ORDER BY id;
Run Code Online (Sandbox Code Playgroud)

然而,这不适用于连接:

-- doesn't work:
SELECT * INTO new_records FROM new_table
  JOIN new_record_ids ON new_record_ids.id = new_table.id
ORDER BY new_table.id;
Run Code Online (Sandbox Code Playgroud)

连接本身是正确的:

-- works:
SELECT * FROM new_table
  JOIN new_record_ids ON new_record_ids.id = new_table.id
ORDER BY new_table.id;
Run Code Online (Sandbox Code Playgroud)

我的问题是:如何将联合表保存到另一个表?

rob*_*b c 5

听起来您正在尝试将行插入到已经存在的表中,在这种情况下您需要类似...

INSERT INTO new_records
SELECT * FROM new_table t JOIN new_record_ids r ON(r.id = t.id)
--this assumes the result of the select has the same column layout as new_records...
--which seems unlikely. replace (SELECT *...) with (SELECT column1, column2, etc...) to match the new_records column layout
ORDER BY t.id
--assuming you meant new_table.id instead of new.id although the ORDER BY clause seems extraneous for an insert anyway
Run Code Online (Sandbox Code Playgroud)

如果我误解了并且您尝试选择尚未创建的新表,请检查文档中的CREATE TABLE...AS SELECT语法。

编辑:

从您的问题下的评论来看,听起来您正在尝试使用查询结果填充一个全新的表,在这种情况下......

CREATE TABLE new_records AS
SELECT t.* FROM new_table t JOIN new_record_ids r ON(r.id = t.id);
Run Code Online (Sandbox Code Playgroud)

...应该工作得很好。正如评论中指出的,SELECT INTO文档指出:

PostgreSQL 使用 SELECT INTO 来表示表创建是历史性的。最好在新代码中使用 CREATE TABLE AS 来实现此目的。