繁体   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