PGSQL - 如何在另一个查询中使用select语句的输出?

时间:2018-04-22 03:43:02

标签: sql postgresql

我意识到我没有做好问我的问题。所以再试一次。

我正在尝试使用以下要求创建一个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实现它。

提前致谢。

4 个答案:

答案 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;

来源:https://www.w3schools.com/sql/sql_insert_into_select.asp

答案 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;