簡體   English   中英

如果 2 列值不存在,則在 SQL 表中插入新行數據

[英]Insert new row of data in SQL table if the 2 column values do not exist

我有一個 PostgreSQL 表與列的interactions

AAId, IDId, S, BasicInfo, DetailedInfo, BN

AAIDIDId是引用其他表的值的 FK。

ID表中大約有 1540 行, AA表中大約有 12 行。

目前在interactions表中,AAId 值只有大約 40 行AAId value = 12我想為所有缺失的IDId值插入一行。

我已經搜索過,但找不到插入這樣的行的答案。 我對 SQL 並不過分自信,我可以做基礎,但這有點超出我的能力范圍。

澄清一下,我想執行一種循環,其中,

for each IDId from 1-1540,
   if (the row with AAId = 12 and IDId(current IDId in the loop does not exist)
       insert a new row with,
           AAId = 12,
           IDId = current IDId in the loop,
           S = 1,
           BasicInfo = Unlikely
           DetailedInfo = Unlikely

SQL有沒有辦法做到這一點?

是的,這是可能的。 在向 Postgres 中的表插入數據時,可以使用來自不同表的數據 在您的特定示例中,只要您在interactions中具有正確的主鍵/唯一鍵( AAIdIDId的組合),以下插入就應該有效:

INSERT INTO interactions (AAId, IDId, S, BasicInfo, DetailedInfo, BN)
SELECT 12, ID.ID, 1, 'Unlikely', 'Unlikely'
FROM ID
ON CONFLICT DO NOTHING;

ON CONFLICT DO NOTHING根據AAIdIDId的組合,保證查詢在嘗試插入已經存在的行時不會失敗。

如果您在interactions中沒有正確的主鍵/唯一鍵,則必須過濾要手動插入的 ID:

INSERT INTO interactions (AAId, IDId, S, BasicInfo, DetailedInfo, BN)
SELECT 12, ID.ID, 1, 'Unlikely', 'Unlikely'
FROM ID
WHERE NOT EXISTS (
    SELECT * FROM interactions AS i
    WHERE i.AAId = 12 AND i.IDId = ID.ID
);

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM