将行从一个表复制到另一个表?
问题描述:
我有这三个表的服务,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。
答
你可以非常容易地在一个步骤与下面的简单查询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
这也是正确的答案。我会为此投票。 –
谢谢,我甚至没有想到它。工作像一个魅力 –
我很高兴你花时间写回馈。谢谢。相信我,你会在未来几年使用'插入abc select .. xyz'将近100次。 –