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

问题描述:

我有这三个表的服务,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; 

那么,我应该怎么做才能从一个表中获取所有的值并在另一个表上插入?或者还有其他方法可以做到这一点吗?

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

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

+0

谢谢,我甚至没有想到它。工作像一个魅力 –

+0

我很高兴你花时间写回馈。谢谢。相信我,你会在未来几年使用'插入abc select .. xyz'将近100次。 –

你可以非常容易地在一个步骤与下面的简单查询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表示。

+0

感谢您的帮助,但我会坚持其他aswer,因为它似乎更容易 –

+0

这也是正确的答案。我会为此投票。 –