-1

我是一个完全的 SQL 菜鸟。我正在尝试在一个表中为另一个表中的每个部分列表创建一个新记录。我无法正确获取循环语法。基本上,这是我正在尝试做的伪代码:

FOR EACH item FROM "SCHEMA1".table1.field1 WHERE table1.field2 = 500 OR table1.field2 = 900 LOOP
USE "SCHEMA1".table2
INSERT INTO "SCHEMA1".table2 (column1, column2, column3)
  VALUES (row_number(), table1.field1, "done")
END LOOP;

table1 有大约 4300 条记录,我希望将大约 90 条特定记录中的一个字段作为新记录(带有附加数据)复制到另一个现有表中。两个表都存在于一个模式中,但服务器有十几个具有重复表和字段的表。

感谢您花时间教育一个老菜鸟。

4

1 回答 1

0

我不知道您要使用对 row_number() 函数的调用来获得什么。
请注意,根据 row_number() 的文档:http ://www.postgresql.org/docs/8.4/static/functions-window.html

请注意,必须使用窗口函数语法调用这些函数;即需要一个 OVER 子句。

如此简单地调用没有 OVER (...) 子句的 row_number() 会给您一个语法错误。
在这里http://www.postgresql.org/docs/8.4/static/sql-expressions.html#SYNTAX-WINDOW-FUNCTIONS您可以找到详细说明如何在 postgresql 中使用 Windows 函数调用。

无论如何,要从表中选择行,并将它们(经过一些修改)插入到另一个表中,您可以使用单个 SQL 命令,例如:

INSERT INTO table2 (column1, column2, column3)
Select row_number() over (order by 1 ),
       table1.field1,
       'done'
FROM table1
WHERE table1.field2 = 500 OR table1.field2 = 900;

这是一个简单的SQLFiddle 演示



在这里您可以找到语法说明:http://www.postgresql.org/docs/8.1/static/sql-insert.html
在这个查询中,我们使用了这种插入变体:

INSERT INTO table [ ( column [, ...] ) ]
    { query }

它执行查询(只是 SELECT xxx FROM yyy 等),然后将此查询的结果(查询返回的行)插入到表中

于 2013-07-23T23:19:31.897 回答