Postgresql
問題將數據插入連接的表postgresql
我有 2 個現有表:‘projects’和‘units’。這兩個表通過項目 ID 連接。在***“項目”表中,該列稱為“id”,每次插入新項目時都會生成。在“units”***表中,相同的 id 稱為“projekt_id”。
我現在想從名為***’temp_units’的第三個表中添加新項目。該表還包含與表‘units’***相關的資訊。因此,對於“temp_units”表中的每一行,我想在“projects”表中創建一個新行,並在“ units ”中創建一個新行桌子。這兩行應該通過項目 id 連接起來。
我嘗試了以下查詢,但出現錯誤:作為表達式的子查詢返回的不止一行。
然後我在某處閱讀了有關添加 Limit = 1 的資訊,因此我將其添加到下面的查詢中(它在此處顯示為註釋)。使用 Limit = 1 程式碼可以工作,但“units”
表中的所有插入數據都連接到***“projects”***表中創建的第一個項目。目前是這樣的:
項目
id -- 1 2 3
單位
Id | projekt_id --------------- 1 | 1 2 | 1 3 | 1
但我需要這樣:
項目
id -- 1 2 3
單位
Id | projekt_id --------------- 1 | 1 2 | 2 3 | 3
我正在使用 PostgreSQL 9.5.19。我真的很感激任何幫助
WITH insert_projekte AS ( INSERT INTO projects (name, projekt_status_id, creator_id, editor_id, inserted_at, updated_at) SELECT name, projekt_status_id, creator_id, editor_id, inserted_at, updated_at FROM temp_units RETURNING ID ) INSERT INTO units (kgnr, ez, projekt_id, creator_id, editor_id, inserted_at, updated_at) SELECT t.kg_ez, t.ez, (SELECT id from insert_projekte/*LIMIT = 1*/), t.creator_id, t.editor_id, t.inserted_at, t.updated_at FROM temp_units t RETURNING ID
所以我最終想通了
WITH insert_projekte AS ( INSERT INTO projects (name, projekt_status_id, creator_id, editor_id, inserted_at, updated_at) SELECT name, projekt_status_id, creator_id, editor_id, inserted_at, updated_at FROM temp_units RETURNING ID, name ) INSERT INTO units (kgnr, ez, projekt_id, creator_id, editor_id, inserted_at, updated_at) SELECT t.kg_ez, t.ez, insert_projekte.id, t.creator_id, t.editor_id, t.inserted_at, t.updated_at FROM temp_units t JOIN insert_projekte on insert_projekte.name = t.name RETURNING ID
我總是將子查詢留在第二個 INSERT 中,所以它以前從未工作過。
謝謝@CL。對於有用的建議。