HANA 中的 IF EXISTS 语句替代方案

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

我想查找“如果存在”,但HANA SQL不理解“如果存在”。是否是我创建的SQL命令错误。

如果记录的“Y”存在于

ZZZ_Exercise_3
的表中,则记录的“N”不存在于
ZZZ_Exercise_3
的表中。如果旧记录为“N”,则应删除该记录。

 CREATE COLUMN TABLE ers.ZZZ_EXERCISE_5(
    ID INT NOT NULL PRIMARY KEY generated by default as IDENTITY,
    Orig_ID INT,
    COMPANY nvarchar(251),
    VALID char(1)
);

COMMIT;

IF EXISTS(
    INSERT INTO ZZZ_EXERCISE_5(Orig_ID, COMPANY, VALID)
    SELECT ID, COMPANY, 'Y' FROM ZZZ_EXERCISE_3
)
ELSE(
    INSERT INTO ZZZ_EXERCISE_5(Orig_ID, COMPANY, VALID)
    SELECT ID, COMPANY, 'N' FROM ZZZ_EXERCISE_3
)

COMMIT;

UPDATE ZZZ_EXERCISE_3
SET COMPANY = (SELECT COMPANY FROM ERS.ZZZ_EXERCISE_5)
WHERE NOT EXISTS (SELECT COMPANY FROM ZZZ_EXERCISE_5 WHERE ZZZ_EXERCISE_5.VALID = 'N')

COMMIT;

DELETE FROM ZZZ_EXERCISE_3
WHERE ERS.ZZZ_EXERCISE_5.VALID = 'N'

SELECT * FROM ZZZ_EXERCISE_3
WHERE NOT EXISTS (SELECT COMPANY FROM ZZZ_EXERCISE_5 WHERE ZZZ_EXERCISE_5.ID = ZZZ_EXERCISE_3.ID)
hana
1个回答
0
投票

不确定哪种 SQL 方言会接受您的语句,但 IF-THEN-ELSE 通常是 SAP HANA 中的 PL/SQL、T-SQL 或 SQLScript 等过程扩展的一部分。

如果您详细解释您想要实现的目标(而不是仅仅发布一些不起作用的非标准语法),可能有一些选项可以在 SAP HANA 中实现这一目标。


如果 ZZZ_Exercise_3 的表中存在记录“Y”,则 ZZZ_Exercise_3 的表中不存在记录“N”。如果旧记录为“N”,则应删除该记录。

根据修改后的描述,我的理解是您想要

  1. 对于
    ZZZ_EXERCISE_5
    中的每条记录: 检查
    ZZZ_EXERCISE_3
    中是否存在,如果存在,则将
    VALID
    中的
    ZZZ_EXERCISE_5
    字段设置为
    Y

    如果记录存在于
    ZZZ_EXERCISE_3
    中但不存在于
    ZZZ_EXERCISE_5
    中,则将该记录插入到
    ZZZ_EXERCISE_5
    中。
    如果
    ZZZ_EXERCISE_3
    中不存在记录,但在
    ZZZ_EXERCISE_5
    中存在,则将
    VALID
    设置为
    N
  2. 之后,您想要从
    ZZZ_EXERCISE_3
    中删除
    ZZZ_EXERCISE_5
    中的匹配记录具有
    VALID
    =
    N
  3. 的所有记录

对于第 1 步,您需要查看

第 2 步比较容易,所以让我们从这里开始:

   DELETE FROM ZZZ_EXERCISE_3 
   WHERE ID IN (SELECT DISTINCT ID 
                FROM ZZZ_EXERCISE_5 
                WHERE VALID ='N');

步骤 1 有点复杂,因为它将结合更新和插入。为此,SAP HANA 提供了

MERGE
命令(也称为
REPLACE
)。 合并|替换文档

在 SAP HANA 2 中,还有一个新命令

MERGE INTO
,它更接近其他 DBMS 中常用的
MERGE
命令。 合并到文档中

© www.soinside.com 2019 - 2024. All rights reserved.