![](/img/trans.png)
[英]Inserting records having a one-to-many relationship in Oracle 11gXE using 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.