在连接中使用 CTE 更新表中的记录

问题描述 投票:0回答:1

我一直在看这个更新声明,其中包括对 cte 的连接。无法找出问题所在。它给了我:“语法错误:意外的‘更新’。(第 7 行)”。不知道我错过了什么。谢谢!

WITH SALESORDER_CTE AS 
(
    SELECT TO_TIMESTAMP(ORDERITEMDRUGMODIFIED, 'MM/DD/YYYY HH12:MI:SS PM') AS CUSTBODY_ORDERITEMDRUGMODIFIED, *, 
        ROW_NUMBER() OVER (PARTITION BY TRANID ORDER BY ORDERITEMDRUGMODIFIED DESC) AS RN
    FROM SALESORDER
)
UPDATE a
SET a.ORDERITEMDRUGMODIFIED = b.ORDERITEMDRUGMODIFIED
FROM SALESORDERLINE AS a
INNER JOIN SALESORDER_CTE AS b ON a.TRANSACTION = b.ID
WHERE b.RN = 1
AND b.ID = 5369076;
join sql-update snowflake-cloud-data-platform common-table-expression
1个回答
0
投票

我在这里看到两个语法问题。首先,连接条件是隐式的,应该出现在

WHERE
子句中,因为不支持
ON
。其次,
SET
子句的左侧不应有别名。试试这个版本:

UPDATE a
SET ORDERITEMDRUGMODIFIED = b.ORDERITEMDRUGMODIFIED
FROM SALESORDERLINE AS a
INNER JOIN SALESORDER_CTE AS b
WHERE a.TRANSACTION = b.ID AND
      b.RN = 1 AND
      b.ID = 5369076;
© www.soinside.com 2019 - 2024. All rights reserved.