我有三个表用于服务,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;
那么,我应该怎样做才能从一个表中获取所有值并插入另一个表中?或者还有其他方法吗?
答案 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。