SAP HANA 更新与连接

Sch*_*sam 0 sql hana

我正在尝试使用连接对 HANA 数据库进行更新。在线 SQL 检查器显示有效语法,在我发现以下内容后: https: //answers.sap.com/questions/11364926/sql-update-join-error.html我也更改了更新的顺序。它仍然给出这个错误:

sql语法错误:“LEFT”附近的语法不正确:第3行第1行(第119位)

更新看起来像这样(经过审查,因为它包含来自我公司的一些数据):

UPDATE TABX AS a
SET b.att1 = 'XXX', b.att2 = 'ZZZ'
LEFT JOIN TABZ AS b ON a.att3 = b.att3
WHERE a.att4 LIKE 'YYY'
AND att5 = 'PPP'
AND is_valid = 'TRUE'
Run Code Online (Sandbox Code Playgroud)

根据 SAP Answers 上的帖子,它应该可以工作。我知道我在以前的 SQL 数据库上这样做过,但 HANA 现在是第一次。

我该如何解决这个问题?

Mat*_*ter 6

当然,语法不正确,如文档中所示(请注意,没有JOIN关键字)。

但是,解决方案取决于您使用的 HANA 版本。

  • HANA2 本地部署:您可以使用UPDATE... SET... FROM... WHERE...语法(请参阅文档,包括示例)。在这FROM部分中,您基本上执行交叉连接并使用条件使其成为左连接WHERE
  • HANA Cloud:在 HANA Cloud 中,该语句FROM的子句UPDATE已被省略,以支持更强大(但更复杂)的MERGE INTO语句(请参阅文档)。

请注意,该MERGE INTO语句也适用于本地 HANA2(请参阅文档),这就是为什么它的使用可能更可取的原因。

使用简化语法的示例应类似于以下内容:

UPDATE TABZ SET att1 = 'XXX', att2 = 'ZZZ'
FROM TABZ b, TABX a
WHERE 
    -- LEFT JOIN
    -- (pls check if this should actually be an inner join)
    (a.att3 = b.att3 OR b.att3 IS NULL)
    -- your other conditions
    AND a.att4 LIKE 'YYY' AND att5 = 'PPP' AND is_valid = 'TRUE' 
Run Code Online (Sandbox Code Playgroud)

请注意,在任何情况下,您都需要使用UPDATE TABZas 最终更新该表中的列(而不是TABX)。