我能够在select语句上获得结果,但是在使用更新时却遇到了问题。 数据库服务器:-Oracle 11g。
update t1
set t1.componentID = cteData.componentID
from tpinventryrecds t1
inner join ( select * from
(select TPLVLKEY , standardName , DOCTYPE , 'Default' as componentID ,count(*) as val from tpinventryrecds
where componentID is null
group by TPLVLKEY , standardName , DOCTYPE)`enter code here`
where val = 1) cteData
on t1.TPLVLKEY = cteData.TPLVLKEY
and t1.standardName = cteData.standardName
and t1.DOCTYPE = cteData.DOCTYPE;
答案 0 :(得分:1)
您不能SET ... FROM
-可能必须是子查询,例如本例;我并不是说这是正确的,但是-至少-它应该可以编译。
UPDATE t1
SET t1.componentID =
(SELECT cteData.componentID
FROM tpinventryrecds t1
INNER JOIN
(SELECT *
FROM ( SELECT TPLVLKEY,
standardName,
DOCTYPE,
'Default' AS componentID,
COUNT (*) AS val
FROM tpinventryrecds
WHERE componentID IS NULL
GROUP BY TPLVLKEY, standardName, DOCTYPE)
WHERE val = 1) cteData
ON t1.TPLVLKEY = cteData.TPLVLKEY
AND t1.standardName = cteData.standardName
AND t1.DOCTYPE = cteData.DOCTYPE);
答案 1 :(得分:0)
使用合并
MERGE INTO tpinventryrecds t
USING
(
select TPLVLKEY , standardName , DOCTYPE , 'Default' as componentID ,count(*) as val from tpinventryrecds
where componentID is null
group by TPLVLKEY , standardName , DOCTYPE
) cteData ON ( t1.TPLVLKEY = cteData.TPLVLKEY
and t1.standardName = cteData.standardName
and t1.DOCTYPE = cteData.DOCTYPE)
WHEN MATCHED THEN UPDATE
SET t1.componentID = cteData.componentID