patternsqlMinor
Bulk insert in multiple tables
Viewed 0 times
multipletablesbulkinsert
Problem
I have two tables on which I perform some bulk inserts:
First
Sec
I don't know how to do the second
Or is there a better way of doing this?
- key: key_id (pk), key_name
- related_key: related_key_id (pk), key_id (fk)
First
INSERT:values_data = "($key_1$), ($key_2$)"
INSERT INTO key (key_name) VALUES values_dataSec
INSERT:values_data = "(1, `the id of the first value inserted in key`)
, (1, `the id of the sec value inserted in key`)"
INSERT INTO related_key (related_key_id, key_id) VALUES values_dataI don't know how to do the second
INSERT because I don't know how to get those ids for the rows inserted in the key table.Or is there a better way of doing this?
Solution
Use a data-modifying CTE to chain the inserts in a single statement.
Assuming from your example that you want to insert
Assuming from your example that you want to insert
1 for related_key_id in all rows.WITH ins_key AS (
INSERT INTO key (key_name)
VALUES ($key_1$)
, ($key_2$)
RETURNING key_id -- return newly generated key_id(s)
)
INSERT INTO related_key (related_key_id, key_id)
SELECT 1, key_id
FROM ins_key;Code Snippets
WITH ins_key AS (
INSERT INTO key (key_name)
VALUES ($$key_1$$)
, ($$key_2$$)
RETURNING key_id -- return newly generated key_id(s)
)
INSERT INTO related_key (related_key_id, key_id)
SELECT 1, key_id
FROM ins_key;Context
StackExchange Database Administrators Q#75210, answer score: 8
Revisions (0)
No revisions yet.