将行从一个表复制到另一个表?

时间:2016-09-22 18:50:06

标签: postgresql plpgsql

我有三个表用于服务,execu_services和一个评级表,它对服务进行评级。我的评级表有execution_services的外键,因此,我想“复制”要对execution_services关系进行评级的服务。我尝试使用以下过程,但此选择不起作用,因为它只返回一个结果。

    BEGIN
        INSERT INTO servico_executado (id, data_abertura, id_solicitacao, id_profissional) 
            VALUES (SELECT id, data_abertura, id_solicitacao, id_profissional FROM servico WHERE id = NEW.id_servico);
        DELETE FROM servico WHERE id = NEW.id_servico;
        RETURN NEW;
    END;

那么,我应该怎样做才能从一个表中获取所有值并插入另一个表中?或者还有其他方法吗?

2 个答案:

答案 0 :(得分:1)

您可以使用CTE通过以下简单查询一步一步轻松完成此操作:

WITH deleted AS (DELETE FROM servico WHERE id = $1 RETURNING *)
INSERT INTO servico_executado (id, data_abertura, id_solicitacao, id_profissional) 
SELECT id, data_abertura, id_solicitacao, id_profissional FROM deleted
RETURNING *;

无需使用PL / pgSQL。移动的id服务在上述查询中由占位符$1表示。

答案 1 :(得分:0)

 INSERT INTO servico_executado 
       SELECT id, data_abertura, id_solicitacao, id_profissional 
       FROM servico WHERE id = NEW.id_servico;

不要使用'VALUES'。如果表中有更多列,则可以在select语句中为缺少的列使用null。