我意识到我没有做好问我的问题。所以再试一次。
我正在尝试使用以下要求创建一个pgsql函数。
我需要将sql语句的输出存储在一行/记录中,并在另一个语句中使用,该语句从第三个表中选择进行一些数学计算并将其插入第二个表。
EXP:
row = select * from table1;
insert into table2(col21,col22,col23,col24,col25)
values(
select
(col31 - row.col11)/row.col15,
(col32 - row.col12)/row.col14,
(col33 - row.col13)/row.col13,
(col34 - row.col14)/row.col12,
(col35 - row.col15)/row.col11
from table3
);
我想知道如何用pgsql实现它。
提前致谢。
答案 0 :(得分:2)
不需要任何花哨的东西;您可以使用普通的SQL:
insert into table2(col1,col2,col3,col4,col5)
select
(b.col31 - a.col11)/a.col15,
(b.col32 - a.col12)/a.col14,
(b.col33 - a.col13)/a.col13,
(b.col34 - a.col14)/a.col12,
(b.col35 - a.col15)/a.col11
from table1 a
cross join table3 b
答案 1 :(得分:1)
应该是相当标准的sql。
INSERT INTO TABLE2 (col1, col2, col3, col4, col5)
VALUES (
SELECT * -- Assuming there's only 5 Columns from Table1
FROM TABLE1
)
如果您正在寻找某种临时表以便稍后更改数据并且能够还原;
CREATE TEMP TABLE temp_table1 AS
SELECT * from table1;
进一步说明: 如果您的第一列是自动递增的pkey,并且您的第二个表中已有数据 - 您应该只插入非增量列的值,否则您将遇到其他错误。
INSERT INTO TABLE2 (col2, col3, col4, col5)
VALUES (
SELECT col2, col3, col4, col5 -- Assuming there's only 5 Columns from Table1 and Col1 is a pkey.
FROM TABLE1
)
答案 2 :(得分:0)
基本SQL:
INSERT INTO table2 (column1, column2, column3, ...)
SELECT column1, column2, column3, ...
FROM table1
WHERE condition;
答案 3 :(得分:0)
谢谢大家的回答。以下是我提出的建议。 参考:https://www.postgresql.org/docs/8.2/static/plpgsql-declarations.html
DECLARE
row table1%rowtype;
BEGIN
select * into strict row from table1;
insert into table2(col21,col22,col23,col24,col25)
values(
select
(col31 - row.col11)/row.col15,
(col32 - row.col12)/row.col14,
(col33 - row.col13)/row.col13,
(col34 - row.col14)/row.col12,
(col35 - row.col15)/row.col11
from table3
);
END;