出现错误“ ORA-00933:SQL命令未正确结束”

时间:2019-04-01 08:25:02

标签: sql oracle join sql-update

我能够在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;

2 个答案:

答案 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