2017-10-19 52 views
0

我有3個表professionalsservicesfeature_professional我需要在插入數據時插入professional。這是我試過的sql。PostgreSQL一次插入2個關係

WITH professionals as (INSERT INTO professionals(id, company_id, first_name) 
VALUES (1, 1, 'peter') RETURNING *) 

INSERT INTO services(id, professional_id, name) 
VALUES (1, (select professionals.id from professionals), 'haircut'), 

INSERT INTO feature_professional(id, professional_id, feature_id, enabled) 
VALUES 
    (1, (select professionals.id from professionals), 1, true) 

我也試過不同的這種包裝所有插入語句,但仍然沒有運氣的變化。我得到的錯誤是syntax error

ERROR: syntax error at or near "INSERT" 
LINE 106: INSERT INTO feature_professional 

完成此操作的正確語法是什麼?我知道如果我拿出第三個insert聲明,查詢就起作用了。例如:

WITH professionals as (INSERT INTO professionals(id, company_id, first_name) 
VALUES (1, 1, 'peter') RETURNING *) 

INSERT INTO services(id, professional_id, name) 
VALUES (1, (select professionals.id from professionals), 'haircut') 

回答

0

你不能一個CTE後做了兩個插入,所以包裹每一個在不同的CTE

SQL DEMO

WITH professionals as (
    INSERT INTO professionals(id, company_id, first_name) 
    VALUES (1, 1, 'peter') RETURNING * 
), 
services as (
    INSERT INTO services(id, professional_id, name) 
    VALUES (1, (select professionals.id from professionals), 'haircut') 
) 
INSERT INTO features(id, professional_id, name) 
VALUES (1, (select professionals.id from professionals), 'autobook'); 

select * from professionals; 
select * from services; 
select * from features; 
+0

如果我做2個CTE語句與插入他們的內部不是要創建2條記錄在數據庫中? – Rodrigo

+0

我從來沒有在插入的CTE之前,所以我儘量在這[** ** DEMO(http://sqlfiddle.com/#!17/23e05/2),但插入後的表犯規顯示任何插入行。這是應該如何工作? –

+0

這工作,這基本上是我在我的應用程序現在。 [DEMO](http://sqlfiddle.com/#!17/23e05/9)。 – Rodrigo

0
INSERT INTO feature_professional (id, professional_id, feature_id, enabled) 
select ?, professionals.id from professionals, ?, ? 

前提是問號,你可以插入值。如果他們不是必需的,你可以忽略它們。

INSERT INTO feature_professional (professional_id) 
select professionals.id from professionals 

這裏是如何從選擇插入靜態值,而不是:

https://www.w3schools.com/sql/sql_insert_into_select.asp

+0

我不知道這是否有道理,但我遇到的問題是在1個查詢中運行這3個查詢。我相信實際的INSERT語句是正確的,只是如何我使用他們的3在一個查詢是不正確 – Rodrigo