未正确结束 sql 查询 [重复]
Posted
技术标签:
【中文标题】未正确结束 sql 查询 [重复]【英文标题】:Not properly end sql query [duplicate] 【发布时间】:2018-09-16 01:13:52 【问题描述】:为什么这个更新抛出错误没有正确结束?
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;
【问题讨论】:
【参考方案1】:Oracle 不支持使用 join 进行更新,但我们可以使用 Inline View 重写如下查询:
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' ;
以下是一般语法:
【讨论】:
【参考方案2】:在内部选择查询中使用更新:
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' ;
【讨论】:
【参考方案3】: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)
这在逻辑上应该与您在问题中写的内容等效的原因是,您的内部联接仅从目标表中过滤掉与 FACT_MGP_ASSET
表中的任何内容都不匹配的记录。
【讨论】:
以上是关于未正确结束 sql 查询 [重复]的主要内容,如果未能解决你的问题,请参考以下文章
试图在我的 SQL 表中插入多行。总是显示 SQL 命令未正确结束 [重复]