在Oracle SQL中插入记录

问题描述 投票:-1回答:1

我有一个带有以下各列的表

USER_ID,LINK_NAME,LINK_URL,DESCRIPTION,LINK_ID. 

USER_ID可以有重复的值。我需要为尚未包含这些数据的LINK_NAME,LINK_URL,DESCRIPTION,LINK_ID添加一个包含USER_ID的特定数据。欢迎任何解决方案。

sql oracle sql-insert
1个回答
0
投票

这是执行此操作的简单方法。

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进行多次插入)。

© www.soinside.com 2019 - 2024. All rights reserved.