在 Postgres 中,我想將模板表中的行復制到實體表中。訣竅是,我想制作某些行的多個副本,而只制作其他行的單個副本。
一個無效的語法示例:
INSERT INTO owned_instances
(
template_id,
owner,
property1,
property2,
etc
)
SELECT
id,
'478aa65e-ecf7-48fb-bc20-f7fcf300aaa9',
property1,
property2,
etc
FROM templates
WHERE id IN (1, 1, 1, 2, 3);
此處的意圖是所有者將收到模板 1 的 3 個副本,以及模板 2 和 3 各 1 個副本。
這個版本不行。WHERE id IN僅獲取每個列出的id的一份副本。我嘗試過的其他語法同樣沒有結果。
當然,多次插入呼叫是可能的,但我想知道是否有一種整潔有效的方法可以在一次插入中執行此操作。
試圖預測一個問題:實體表中的副本將在以后單獨變異。因此,在這種情況下,僅添加一列來計算一行代表多少個副本的快速解決方案將不起作用。
uj5u.com熱心網友回復:
您走在正確的軌道上,但您需要加入包含以下id值的表:
INSERT INTO owned_instances (template_id, owner, property1, property2, etc)
SELECT
i.id,
'478aa65e-ecf7-48fb-bc20-f7fcf300aaa9',
t.property1,
t.property2,
t.etc
FROM templates t
INNER JOIN (
SELECT 1 AS id UNION ALL SELECT 1 UNION ALL SELECT 1 UNION ALL
SELECT 2 UNION ALL SELECT 3
) i
ON i.id = t.id;
轉載請註明出處,本文鏈接:https://www.uj5u.com/qianduan/418788.html
標籤:
