在 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)
我的问题是:如何将联合表保存到另一个表?
听起来您正在尝试将行插入到已经存在的表中,在这种情况下您需要类似...
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 来实现此目的。
归档时间: |
|
查看次数: |
23158 次 |
最近记录: |