我有两张桌子。一个包含票证列表,一个包含每个票证中的所有注释。票证有所有者,评论制作者由他们的user_id跟踪。
我想将门票的所有者设置为发出第一条评论的用户。脚本的基础是:
update incident inc
inner join incidentdescription incdes on
inc.inci_id = incdes.inci_id
set inc.owner_id=incdes.user_id;
但是,每张票都有几条评论。我可以通过incdes.creationdate跟踪第一条评论。我需要有最老的一个。但是,如何确保在设置部分从每张票的最旧评论中选择incdes.user_id?
答案 0 :(得分:3)
您可以在Oracle中尝试其中任何一项
正常更新
UPDATE
INCIDENT
SET
INCIDENT.OWNER_ID =
( SELECT
INCIDENTDESCRIPTION.USER_ID
FROM
INCIDENTDESCRIPTION
WHERE
INCIDENT.OWNER_ID = INCIDENTDESCRIPTION.USER_ID )
WHERE
EXISTS
(SELECT
INCIDENTDESCRIPTION.USER_ID
FROM
INCIDENTDESCRIPTION
WHERE
INCIDENT.OWNER_ID = INCIDENTDESCRIPTION.USER_ID);
使用内嵌视图(如果Oracle认为可以更新)
注意:如果您遇到非密钥保留行错误,请添加索引以解析相同内容以使其可更新
UPDATE
(SELECT
INCIDENT.OWNER_ID AS OLD,
INCIDENTDESCRIPTION.USER_ID AS NEW
FROM
INCIDENT
INNER JOIN
INCIDENTDESCRIPTION
ON INCIDENT.INCI_ID = INCIDENTDESCRIPTION.INCI_ID) T
SET
T.OLD = T.NEW;
使用合并
MERGE INTO
INCIDENT
USING
(SELECT
T1.ROWID AS RID,
T2.INCI_ID
FROM
INCIDENT T1
INNER JOIN
INCIDENTDESCRIPTION T2
ON INCIDENT.INCI_ID = INCIDENTDESCRIPTION.INCI_ID)
ON
( ROWID = RID )
WHEN MATCHED
THEN
UPDATE SET INCIDENT.INCI_ID = INCIDENTDESCRIPTION.INCI_ID;