我有一个带有以下各列的表
USER_ID,LINK_NAME,LINK_URL,DESCRIPTION,LINK_ID.
USER_ID
可以有重复的值。我需要为尚未包含这些数据的LINK_NAME,LINK_URL,DESCRIPTION,LINK_ID
添加一个包含USER_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进行多次插入)。