2016-09-22 159 views
0

我有這三個表的服務,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
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次。 –

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表示。

+0

感謝您的幫助,但我會堅持其他aswer,因爲它似乎更容易 –

+0

這也是正確的答案。我會爲此投票。 –

相關問題