无法正确结束sql查询

无法正确结束sql查询,sql,oracle,plsql,Sql,Oracle,Plsql,为什么此更新引发错误未正确结束 UPDATE FACT_MGP_MASDP1 SET STATUS_DN = 'AGING_REPORTED', ASSET_DN_KEY = '7258-1046', STATUS = 'AGING_REPORTED' FROM FACT_MGP_MASDP1 T1 INNER JOIN FACT_MGP_ASSET T2 ON (T2.ASSET_ID = T1.ASSET_ID) WHERE T1.DATEKEY = 20171231 OR T1.D

为什么此更新引发错误未正确结束

UPDATE FACT_MGP_MASDP1
SET STATUS_DN = 'AGING_REPORTED', ASSET_DN_KEY = '7258-1046', STATUS = 'AGING_REPORTED'
FROM FACT_MGP_MASDP1 T1
INNER JOIN FACT_MGP_ASSET T2
    ON (T2.ASSET_ID = T1.ASSET_ID)
WHERE T1.DATEKEY = 20171231 OR T1.DATEKEY = 20171130;

Oracle不支持使用join进行更新,但我们可以使用内联视图重写如下查询:

UPDATE 
(
 SELECT STATUS_DN  AS OldVal,
        ASSET_DN_KEY AS OldVal1,
        STATUS AS OldVal2
 FROM FACT_MGP_MASDP1 T1
 INNER JOIN FACT_MGP_ASSET T2
 ON (T2.ASSET_ID = T1.ASSET_ID)
 WHERE T1.DATEKEY = 20171231 OR T1.DATEKEY = 20171130
 ) AS t
SET t.OldVal = 'AGING_REPORTED', t.OldVal1= '7258-1046' , t.OldVal2= 'AGING_REPORTED' ;
以下是一般语法:


Oracle不支持使用join进行更新,但我们可以使用内联视图重写如下查询:

UPDATE 
(
 SELECT STATUS_DN  AS OldVal,
        ASSET_DN_KEY AS OldVal1,
        STATUS AS OldVal2
 FROM FACT_MGP_MASDP1 T1
 INNER JOIN FACT_MGP_ASSET T2
 ON (T2.ASSET_ID = T1.ASSET_ID)
 WHERE T1.DATEKEY = 20171231 OR T1.DATEKEY = 20171130
 ) AS t
SET t.OldVal = 'AGING_REPORTED', t.OldVal1= '7258-1046' , t.OldVal2= 'AGING_REPORTED' ;
以下是一般语法:


Oracle不支持更新联接语法,但我们可以重写为:

UPDATE FACT_MGP_MASDP1
SET
    STATUS_DN = 'AGING_REPORTED',
    ASSET_DN_KEY = '7258-1046',
    STATUS = 'AGING_REPORTED'
FROM FACT_MGP_MASDP1 T1
WHERE
    EXISTS (SELECT 1 FROM FACT_MGP_ASSET WHERE T2.ASSET_ID = T1.ASSET_ID) AND
    T1.DATEKEY IN (20171231, 20171130)

这在逻辑上应该等同于您在问题中所写的内容的原因是,您的内部联接只是从目标表中筛选出与
事实\u MGP\u资产
表中的任何内容都不匹配的记录。

Oracle不支持更新联接语法,但我们可以将其重写为:

UPDATE FACT_MGP_MASDP1
SET
    STATUS_DN = 'AGING_REPORTED',
    ASSET_DN_KEY = '7258-1046',
    STATUS = 'AGING_REPORTED'
FROM FACT_MGP_MASDP1 T1
WHERE
    EXISTS (SELECT 1 FROM FACT_MGP_ASSET WHERE T2.ASSET_ID = T1.ASSET_ID) AND
    T1.DATEKEY IN (20171231, 20171130)

这在逻辑上应该等同于您在问题中所写内容的原因是,您的内部联接只是从目标表中筛选出与
事实\u MGP\u资产
表中的任何内容都不匹配的记录。

使用内部选择查询的更新:

UPDATE 
( SELECT STATUS_DN, ASSET_DN_KEY, STATUS  FROM FACT_MGP_MASDP1 T1
 INNER JOIN FACT_MGP_ASSET T2 ON (T2.ASSET_ID = T1.ASSET_ID)
 WHERE T1.DATEKEY = 20171231 OR T1.DATEKEY = 20171130
 ) AS A
SET A.STATUS_DN = 'AGING_REPORTED', A.ASSET_DN_KEY= '7258-1046' , A.STATUS= 'AGING_REPORTED' ;

将更新与内部选择查询一起使用:

UPDATE 
( SELECT STATUS_DN, ASSET_DN_KEY, STATUS  FROM FACT_MGP_MASDP1 T1
 INNER JOIN FACT_MGP_ASSET T2 ON (T2.ASSET_ID = T1.ASSET_ID)
 WHERE T1.DATEKEY = 20171231 OR T1.DATEKEY = 20171130
 ) AS A
SET A.STATUS_DN = 'AGING_REPORTED', A.ASSET_DN_KEY= '7258-1046' , A.STATUS= 'AGING_REPORTED' ;