簡體   English   中英

在 Oracle SQL 中插入記錄

[英]inserting records in Oracle SQL

我有一個包含以下列的表格

USER_ID,LINK_NAME,LINK_URL,DESCRIPTION,LINK_ID. 

USER_ID可以有重復的值。 我需要為那些尚未包含它的USER_ID添加一個包含LINK_NAME,LINK_URL,DESCRIPTION,LINK_ID的特定數據。 歡迎任何解決方案。

這是一個簡單的方法來做到這一點。

INSERT INTO your_table (user_id,
                    link_name,
                    link_url,
                    description,
                    link_id) 
SELECT a.user_id,
      a.link_name,
      a.link_url,
      a.description,
      a.link_id
 FROM (SELECT DISTINCT user_id,
                       :1 link_name,
                       :2 link_url,
                       :3 description,
                       :4 link_id
         FROM your_table yt) a
WHERE NOT EXISTS
             (SELECT 'X'
                FROM your_table b
               WHERE     b.user_id = a.user_id
                     AND NVL (b.link_name, 'IMPOSSIBLE_VALUE') = a.link_name
                     AND NVL (b.link_url, 'IMPOSSIBLE_VALUE') = a.link_url
                     AND NVL (b.description, 'IMPOSSIBLE_VALUE') = a.description
                     AND NVL (TO_CHAR(b.link_id), 'IMPOSSIBLE_VALUE') = a.link_id)

我假設 link_id 將是一個 NUMBER,因此為了在此使用 NVL,我將其轉換為 CHAR。 我采取的另一個假設是 USER_ID 有索引。 如果您在此列上沒有索引,則會出現性能問題(取決於表的大小)。 如果這是一個巨大的表,您可能希望在 DISTINCT 之前使用 PARALLEL 提示,因為您必須進行全表掃描才能獲得不同的用戶 ID(而不是為 user_id 進行多次插入)。

暫無
暫無

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

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